示例#1
0
        public static Delegate3 MethodF(Delegate1 delegate1, Delegate2 delegate2)
        {
            #region Cтарий варіант, який необхідно замінити
#if false
            return(delegate { return delegate1.Invoke() + delegate2.Invoke(); });
#endif
            #endregion

            #region Аналог старого варіанту який не підходить, так як в старих версіях це не реалізувало б замикання
#if false
            return(() => delegate1.Invoke() + delegate2.Invoke());
#endif
            #endregion

            #region Варіант з використанням Nested функції (локальної функції)
#if false
            // але в такому випадку втрачається смисл передавати в даний метод вхідні дані,
            // так як реалізація конкатанації рядків відбуваєтсья в методі AnonymousMethod()
            //return AnonymousMethod;

            // локальна функція
            string NestedMethod()
            {
                return(delegate1.Invoke() + delegate2.Invoke());
            }

            // ще простіше простіше скориставшись локальною функцією
            return(NestedMethod);
#endif
            #endregion

            #region Варіант з використанням статичних методів (можна і через звичайні, що практично дублюватиме логіку)
#if false
            // приймаємо два делегата, виконуємо і результат заносимо в поле
            ResBothDel(delegate1, delegate2);
            // зчитуємо дані з поля і передаємо їх іншим методом
            return(ForDel3);
#endif
            #endregion

            #region Варіант з використанням Extention - методів розширення
#if true
            // можна  було б назвати: методика "кидок через плече"
            return(ResDel12(delegate1, delegate2).ExMethodDel12);
#endif
            #endregion
        }
        static void Main(string[] args)
        {
            Delegate1 obj = AddNums1;
            double result = obj.Invoke(10, 20.5f, 50.2);
            Console.WriteLine(result);
            Delegate2 obj2 = AddNums2;
            obj2.Invoke(10, 55.2f,12.5);
           //
            Console.Read();


        }
示例#3
0
        static void Main()
        {
            // Создаем экземпляр делегата delegate1 типа Delegate1 и сообщаем с ним Method1
            Delegate1 delegate1 = new Delegate1(Method1);

            // Создаем экземпляр делегата delegate1 типа Delegate1 и сообщаем с ним Method1
            Delegate2 delegate2 = delegate1.Invoke();

            // Вызываем метод сообщенный с делегатом.
            delegate2.Invoke();

            // Задержка.
            Console.ReadKey();
        }
示例#4
0
        static void Main(string[] args)
        {
            Delegate1 obj1   = AddNums1; //or new DelegatesProj.Delegate1(AddNums1);
            double    result = obj1.Invoke(100, 34.2f, 129.221);

            Console.WriteLine(result);

            Delegate2 obj2 = AddNums2;

            obj2.Invoke(100, 32.2f, 129.221);

            Delegate3 obj3   = CheckLength;
            bool      status = obj3.Invoke("Hello World");

            Console.WriteLine(status);
            Console.ReadLine();
        }
示例#5
0
        static void Main(string[] args)
        {
            Delegate2 obj2 = a =>
            {
                if (a % 2 == 0)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            };
            bool val = obj2.Invoke(10);

            Console.WriteLine(val);
            Console.ReadKey();
        }
示例#6
0
 public static Delegate3 MethodF(Delegate1 delegate1, Delegate2 delegate2)
 {
     return delegate { return delegate1.Invoke() + delegate2.Invoke(); };
 }
示例#7
0
 public static Delegate3 MethodF(Delegate1 delegate1, Delegate2 delegate2)
 {
     return(delegate { return delegate1.Invoke() + delegate2.Invoke(); });
 }