예제 #1
0
        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));
        }
예제 #2
0
        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}");
        }
예제 #4
0
        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();
        }
예제 #5
0
 {     //ЕСЛИ СОЗДАЕТСЯ АНОНИМНЫЙ МЕТОД, ТО нужно это ассоциировать как создание экземпляра делегата и СООБЩЕНИЯ этого метода с ним
     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(); });
     }