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(); }
static void Main() { // Создаем экземпляр делегата delegate1 типа Delegate1 и сообщаем с ним Method1 Delegate1 delegate1 = new Delegate1(Method1); // Создаем экземпляр делегата delegate1 типа Delegate1 и сообщаем с ним Method1 Delegate2 delegate2 = delegate1.Invoke(); // Вызываем метод сообщенный с делегатом. delegate2.Invoke(); // Задержка. Console.ReadKey(); }
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(); }
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(); }
public static Delegate3 MethodF(Delegate1 delegate1, Delegate2 delegate2) { return delegate { return delegate1.Invoke() + delegate2.Invoke(); }; }
public static Delegate3 MethodF(Delegate1 delegate1, Delegate2 delegate2) { return(delegate { return delegate1.Invoke() + delegate2.Invoke(); }); }