BadCats
@BadCats

Вопрос по классу-делегату и принимаемыми им параметрами?

всем привет, только что начал изучать делегаты. имеется такой пример:
// Класс, метод которого будет сообщен с делегатом.
    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 т.е ничего не возвращает, и не повлиял ли данный метод на принципы построения делегата и параметры его конструктора?
Т.е в итоге это либо

  • общая аксиома
  • конкретный случай построения класса-делегата сообщенного с данным методом

вот в качестве ответа я хочу получить разъяснение и ответ, что из двух вариантов является верным.
  • Вопрос задан
  • 371 просмотр
Решения вопроса 2
@atticus_finch
Отвечая на ваш вопрос - это конкретный случай построения класса-делегата сообщенного с данным методом.
Когда вы создаете класс-делегата (public delegate void MyDelegate();) вы указываете сигнатуру методов, которые потом можно сообщить с этим делегатом.
Как пример вот вам делегат с принимаемыми параметрами и возвращаемым значение.
public delegate int MyDelegate(int a, int b);
Теперь вы можете сообщить с этим делегатом методы с такой же сигнатурой. Например
public static int Sum(int a, int b)
        {
            return a+b;
        }

Вызов делегата
class Program
    {
        static void Main()
        {
            MyDelegate myDelegate = new MyDelegate(MyClass.Sum); 
            int result = myDelegate(5, 10);
        }
    }
Ответ написан
Комментировать
@dmitryKovalskiy
программист средней руки
Какой конструктор делегата? какой класс-делегат? вы о чем вообще? делегат - это тип, представляющий собой ссылку на метод, который удовлетворяет некоторой сигнатуре. В вашем случае сигнатура - ничего на вход, ничего на выход. Собсно доки .
MyDelegate myDelegate = new MyDelegate(MyClass.Method)

При такой записи вы должны внутрь "конструктора" передать метод, удовлетворяющий сигнатуре делегата.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы