Exemple #1
0
 // Метод, принимающий делегат, четко указывается  название класса, где содержится
 // делегат, а также название делегата
 public void AnalyzePeople(Human.HumanDelegate ptr)
 {
     Console.WriteLine("Будем выполнять действия над человеком !!!");
     // Вызываются методы, на которые указывает делегат
     foreach (Human obj in people)
     {
         ptr(obj);
     }
 }
Exemple #2
0
        static void Main()
        {
            Console.WriteLine("Пример работы Делегата");
            Firm firm = new Firm(); // В этой строке происходит использование делегатов. Создаётся объект

            // делегата используя ключевое слово new.

            firm.AnalyzePeople(new Human.HumanDelegate(AnalyzeSex)); // Сейчас делегат указывает на метод AnalyzeSex
            firm.AnalyzePeople(new Human.HumanDelegate(AnalyzeAge)); // Сейчас делегат указывает на метод AnalyzeAge
            Console.Read();

            // -----------------
            Console.WriteLine("Пример работы Делегата");
            // Создание делегатов
            Human.HumanDelegate sex = new Human.HumanDelegate(AnalyzeSex);
            Human.HumanDelegate age = new Human.HumanDelegate(AnalyzeAge);

            // ----------------- из конспекта
            ////Сейчас мы через делегат вызывали статические методы класса, но это можно делать и с обычными.
            ////Для этого надо чуть-чуть видоизменить создание делегата.Например:
            //Firm firm = new Firm();
            //// Test - это какой-то класс в нем есть методы AnalyzeSex, AnalyzeAge
            //Test test = new Test();
            //firm.AnalyzePeople(new Human.HumanDelegate(test.AnalyzeSex));
            // ----------------- из конспекта (конец)

            // Многоадресный Делегат (формируем его через +)
            // Произойдет вызов методов AnalyzeSex и AnalyzeAge
            firm.AnalyzePeople(sex + age);
            Console.WriteLine("\n\n");
            // Многоадресный Делегат (формируем его через +)
            // Произойдет вызов методов AnalyzeSex и AnalyzeAge
            firm.AnalyzePeople(age + sex);

            // Или так тоже Многоадресный Делегат
            Console.WriteLine("\n\n");
            // Многоадресный Делегат (формируем его через Combine)
            // Произойдет вызов методов AnalyzeSex и AnalyzeAge
            firm.AnalyzePeople((Human.HumanDelegate)Delegate.Combine(sex, age));
            // Или так тоже можно
            MulticastDelegate del = age + sex;

            firm.AnalyzePeople((Human.HumanDelegate)del);
            // Удаляем один делегат
            Delegate onlysex = MulticastDelegate.Remove(del, age);

            Console.WriteLine("\n\n************************************\n\n");
            // Уже не многоадресный делегат
            firm.AnalyzePeople((Human.HumanDelegate)onlysex);
            Console.Read();
        }
Exemple #3
0
        static void Main()
        {
            Console.WriteLine("Пример работы Делегата");
            Firm firm = new Firm();                                  // В этой строке происходит использование делегатов. Создаётся объект // делегата используя ключевое слово new.

            firm.AnalyzePeople(new Human.HumanDelegate(AnalyzeSex)); // Сейчас делегат указывает на метод AnalyzeSex
            firm.AnalyzePeople(new Human.HumanDelegate(AnalyzeAge)); // Сейчас делегат указывает на метод AnalyzeAge
            Console.Read();

            // -----------------
            Console.WriteLine("Пример работы Делегата");
            // Создание делегатов
            Human.HumanDelegate sex = new Human.HumanDelegate(AnalyzeSex);
            Human.HumanDelegate age = new Human.HumanDelegate(AnalyzeAge);

            // Многоадресный Делегат (формируем его через +)
            // Произойдет вызов методов AnalyzeSex и AnalyzeAge
            firm.AnalyzePeople(sex + age);
            Console.WriteLine("\n\n");
            // Многоадресный Делегат (формируем его через +)
            // Произойдет вызов методов AnalyzeSex и AnalyzeAge
            firm.AnalyzePeople(age + sex);

            // Или так тоже Многоадресный Делегат
            Console.WriteLine("\n\n");
            // Многоадресный Делегат (формируем его через Combine)
            // Произойдет вызов методов AnalyzeSex и AnalyzeAge
            firm.AnalyzePeople((Human.HumanDelegate)Delegate.Combine(sex, age));
            // Или так тоже можно
            MulticastDelegate del = age + sex;

            firm.AnalyzePeople((Human.HumanDelegate)del);
            // Удаляем один делегат
            Delegate onlysex = MulticastDelegate.Remove(del, age);

            Console.WriteLine("\n\n************************************\n\n");
            // Уже не многоадресный делегат
            firm.AnalyzePeople((Human.HumanDelegate)onlysex);
            Console.Read();
        }