для этого ли нужны делегаты?
От: BadCats  
Дата: 30.04.16 16:48
Оценка:
всем привет, только начал изучать делегаты. Имеется вот такой пример:
// Класс, метод которого будет сообщен с делегатом.
    class MyClass
    {
        // Создаем метод, который планируем сообщить с делегатом.
        public string Method(string name)
        {
            return "Hello " + name;
        }
    }

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

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

    class Program
    {
        static void Main()
        {
            MyClass instance = new MyClass();

            MyDelegate myDelegate = new MyDelegate(instance.Method); // Создаем экземпляр делегата и сообщаем с ним метод. (2)
            

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

            Console.WriteLine(greeting);

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

            Console.WriteLine(greeting);

            // Delay.
            Console.ReadKey();
        }
    }

ради интереса заменил строку:
string greeting = myDelegate("djon"); // Вызываем метод сообщенный с делегатом. (3)

на
string greetingg = MyClass.Method("djon");

и получил следующую ошибку от Visual Studio 2012 :

Ошибка 1
Для нестатического поля, метода или свойства "Delegates.MyClass.Method(string)" требуется ссылка на объект


Ведь делегат это и есть объект, содержащий в себе указатели на методы.

Т.е этот пример с ошибкой допущенной мной ради эксперимента, и есть наглядный или можно сказать жизненный пример почему необходимо использовать делегаты?

Если так, то хорошо, если нет то приведите свои жизненные примеры использования делегатов.
c#
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.