public static void Demo() { // delegate = type safe function pointer, immutable // expression lambda - (input-params) => expression MyDelegate1 productIsEven = (x, y) => x * y % 2 == 0; Console.WriteLine(productIsEven(3, 4)); Console.WriteLine(productIsEven(3, 5)); // statement lambda - (input-params) => {statement; } MyDelegate2 greetings = n => { Console.WriteLine("Hello " + n); }; greetings("Guido"); greetings.Invoke("Raymond"); // multicast delegate greetings += new MyDelegate2(Hiya); greetings("Alex"); // multicast with non-void return type Func <int> func = delegate { return(1); }; func += delegate { return(2); }; foreach (Func <int> run in func.GetInvocationList()) // can't use var? { Console.WriteLine(run()); } // generic delegate Func <int, int, bool> productDivByThree = (x, y) => x * y % 3 == 0; Console.WriteLine(productDivByThree(4, 6)); }
static void Main(string[] args) { MyDelegate1 myDelegate1 = new MyDelegate1(Method1); MyDelegate2 myDelegate2 = myDelegate1.Invoke(); myDelegate2.Invoke(); //Delay Console.ReadKey(); }
static void Main(string[] args) { int n = new Random().Next(10000, 100000); int[] array = new int[10]; for (int i = 0; i < array.Length; i++) { array[i] = new Random().Next(10, 100); } MyDelegate1 delegate1 = new MyDelegate1(Foo1); MyDelegate2 delegate2 = new MyDelegate2(Foo2); delegate2.Invoke(delegate1.Invoke(n)); Console.WriteLine(); delegate2.Invoke(array); Console.WriteLine(); Console.WriteLine($"Target: {delegate1.Target}; Method: {delegate1.Method}"); Console.WriteLine($"Target: {delegate2.Target}; Method: {delegate2.Method}"); }
static void Main(string[] args) { CustomerManager customerManager = new CustomerManager(); //customerManager.SendMessage(); //customerManager.ShowAlert(); //MyDelegate myDelegate = customerManager.SendMessage; //myDelegate += customerManager.ShowAlert; //myDelegate.Invoke(); MyDelegate2 myDelegate2 = customerManager.SendMessage2; myDelegate2.Invoke("Caglar"); Console.ReadLine(); }
{ //ЕСЛИ СОЗДАЕТСЯ АНОНИМНЫЙ МЕТОД, ТО нужно это ассоциировать как создание экземпляра делегата и СООБЩЕНИЯ этого метода с ним public static MyDelegate3 Method(MyDelegate1 myDelegate1, MyDelegate2 myDelegate2) { // это анонимный метод delegate { return myDelegate1.Invoke() + myDelegate2.Invoke(); }; // это техника ПРЕДПОЛОЖЕНИЯ делагата: new MyDelegate(delegate { return myDelegate1.Invoke() + myDelegate2.Invoke(); }); return(delegate { return myDelegate1.Invoke() + myDelegate2.Invoke(); }); }