Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.04.2016, 14:58   #1
BadCats
Пользователь
 
Аватар для BadCats
 
Регистрация: 31.01.2016
Сообщений: 67
Подмигивание Вопрос по классу-делегату и принимаемыми им параметрами

всем привет, только что начал изучать делегаты. имеется такой пример:
Код:
// Класс, метод которого будет сообщен с делегатом.
    static class MyClass
    {
        // Создаем статический метод, который планируем сообщить с делегатом.
        public static void Method()
        {
            Console.WriteLine("Строку вывел метод сообщенный с делегатом.");
        }
    }

    // На 21-й строке создаем класс-делегата с именем MyDelegate,
    // метод, который будет сообщен с экземпляром данного класса-делегата, 
    // не будет ничего принимать и не будет ничего возвращать.

    public delegate void MyDelegate();  // Создаем класс делегата. (1) 

    class Program
    {
        static void Main()
        {
            MyDelegate myDelegate = new MyDelegate(MyClass.Method); // Создаем экземпляр делегата. (2)

            myDelegate.Invoke(); // Вызываем метод сообщенный с делегатом. (3)

            myDelegate();        // Другой способ вызова метода сообщенного с делегатом. (3')

            // Delay.
            Console.ReadKey();
        }
    }
обратите внимание, на данную строку:
Код:
public delegate void MyDelegate();  // Создаем класс делегата. (1)
данный курс предоставляется в виде видео-уроков, автор говорит следующее:

"обратите внимание, что метод (конструктор по умолчанию в нашем классе-делегате), который будет сообщен с этим экземпляром данного класса-делегата - ничего не должен принимать , и также ничего не должен возвращать "

вот мой вопрос: то, что конструктор по умолчанию класса-делегата :ничего не должен принимать , и также ничего не должен возвращать " - это аксиома для всех делегатов при из создании, или это конкретный случай из-за того, что данный делегат, в данном случае сообщен с таким методом:
Код:
public static void Method()
        {
            Console.WriteLine("Строку вывел метод сообщенный с делегатом.");
        }
который ничего не принимает в качестве параметров и является void т.е ничего не возвращает, и не повлиял ли данный метод на принципы построения делегата и параметры его конструктора?
Т.е в итоге это либо
  • общая аксиома
  • конкретный случай построения класса-делегата сообщенного с данным методом
вот в качестве ответа я хочу получить разъяснение и ответ, что из двух вариантов является верным.
BadCats вне форума Ответить с цитированием
Старый 12.04.2016, 17:35   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ну так создайте метод и делегат с параметрами, и узнаете

https://msdn.microsoft.com/en-us/lib...=vs.71%29.aspx
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 13.04.2016, 07:04   #3
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Это не конструктор класса делегата, тут вообще не применимо понятие "класс делегата", т.к. классы это одно (и там есть конструкторы в том числе), а делегаты - другое. Данная конструкция - объявление типа делегата (typedef, type declaration), оно говорит в программе, что на основе такой конструкции будут объявляться некие элементы программы, например, переменные, которые будут соответствовать этому делегату, в такие переменные можно назначить методы, существующие в программе и вызывать (Invoke) их через переменную. Аналог из "обычного" программирования это ссылка на функцию/метод.
И, конечно же, объявлять можно любые произвольные делегаты (как и любые произвольные функции/методы), а тут просто конкретный случай, для упрощения без параметров и результата.
phomm вне форума Ответить с цитированием
Старый 13.04.2016, 10:24   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
// Создаем класс делегата. (1)
объявляем тип-делегат.
Цитата:
т.к. классы это одно (и там есть конструкторы в том числе), а делегаты - другое.
вообще-то делегаты это тоже классы
Цитата:
/ Вызываем метод сообщенный с делегатом. (3)
// Другой способ вызова метода сообщенного с делегатом. (3')
на самом деле это одно и тоже по сути.
Цитата:
конструктор по умолчанию класса-делегата :ничего не должен принимать , и также ничего не должен возвращать " - это аксиома для всех делегатов при из создании
смотрите свой пункт 2.
конструктор вполне себе принимает.
а вот метод Invoke имеет ту сигнатуру которую вы указали при объявлении типа-делегата.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 13.04.2016 в 10:27.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обращение к инициализированному классу C++ Tyritti Общие вопросы C/C++ 2 05.08.2015 16:00
Create с параметрами. Вопрос для эстетов Дmmm Общие вопросы Delphi 16 19.07.2014 23:51
Обращение к базовому классу ACE Valery Общие вопросы C/C++ 17 02.01.2013 18:04
программа с типизированными параметрами-значениями и параметрами-переменными Kira09 Паскаль, Turbo Pascal, PascalABC.NET 1 20.12.2010 22:23