всем привет, только начал учить делегаты. и пока понял следующее:
для того, чтобы создать делегат, мы сперва создаем класс-делегат(да,да я знаю, что это не совсем корректное название )
public delegate void MyDelegate(); // Создаем класс делегата. (1)
класс-делегат описывает сигнатуру метода который мы сообщаем (от слова делаем общим) с этим делегатом.
// Создаем статический метод, который планируем сообщить с делегатом.
public static void Method()
{
Console.WriteLine("Строку вывел метод сообщенный с делегатом.");
}
затем, мы создаем экземпляр делегата, конструктор которого принимает нужный нам для сообщения метод:
MyDelegate myDelegate = new MyDelegate(MyClass.Method); // Создаем экземпляр делегата. (2)
так как я понял, если сигнатура еще одного метода
// Создаем статический метод, который планируем сообщить с делегатом.
public static void MyMethod()
{
Console.WriteLine("Строку вывел метод сообщенный с делегатом.");
}
- совпадает с сигнатурой класса-делегата, то нам остается создать только еще один экземпляр делегата
MyDelegate myDelegate = new MyDelegate(MyClass.MyMethod); // Создаем экземпляр делегата. (2)
и просто в качестве параметра конструктора передать другой метод с такой же сигнатурой(кроме имени конечно)
А если сигнатура метода, который мы хотим сообщить отличается от существующего уже в программе класса-делегата, то нам необходимо создать новый, который бы описывал другую сигнатуру нужного нам метода(тип возвращаемого и принимаемого значений) и затем соответственно экземпляр по этому классу-делегату.
Т.е как я понял если сигнатура двух-трех методов в программе одинакова(кроме имени), то мы можем просто "клипать" экземпляры делегатов, каждый из которых будет сообщен со своим из этих нескольких методов. И если три метода с одинаковой сигнатурой, а четвертый - с отличной, то для этого придется создать уже новый класс-делегат.
Я правильно все понял?