Головна‎ > ‎C#‎ > ‎Додатково‎ > ‎

Делегати

1. Об'єкт, що вказує на метод і дає можливість визвати цей метод

2. Анонімний метод

3. Лямбда-вирази є більш зручними


Thread thread = new Thread(
     delegate(){ F1(a); }    // () =>  { F1(a); } 
);





Приклад 1


    delegate int IntOperation(int i, int j);

    public class MyClass
    {
        public static int Sum(int x, int y)
        {
            return x + y;
        }

        public static int Prz(int x, int y)
        {
            return x * y;
        }

        public static int Del(int x, int y)
        {
            return x / y;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            // Ініціалізуємо делегат
            IntOperation op1 = MyClass.Sum;

            int result = op1(5, 10);
            Console.WriteLine("Сума: " + result);

            op1 = MyClass.Prz;
            result = op1(5, 10);
            Console.WriteLine("Добуток: " + result);

            Console.ReadLine();
        }
    }




Приклад 2


public delegate void Print(int value);

static void Main(string[] args)
{
     Print printDel = PrintNumber    // Print printDel = new Print(PrintNumber);

     printDel(200);

     printDel = PrintMoney;

     printDel(200);

     Console.ReadKey();
}

public static void PrintNumber(int num)
{
     Console.WriteLine("Number: {0}", num);
}

public static void PrintMoney(int money)
{
     Console.WriteLine("Money: {0} $", money);
}


Number: 200
Money: 200 $




Приклад 3


delegate void HELLO();

static void Main(string[] args)
{     
     HELLO HW = delegate { Console.WriteLine("Hello Ukraine!"); };
     HW();
     HW.Invoke();
     Console.ReadKey();
}




Можна визвати зразу кілька методів

delegate void MyDelegate();

static void Main(string[] args)
{     
     var cars = F1;                // new MyDelegate(F1)
     cars += F2;
     cars += F3;
     cars.Invoke();                // або cars();
}




Запуск додаткової функції при події

button1.Click += new EventHandler(this.My_Click);              // WinForm
button1.Click += new RoutedEventHandler(this.My_Click);    //WPF