static void Main(string[] args) { Circle1 per = new Circle1(new length()); per.Start(); Operation operation1 = per.P; double result = Convert.ToInt32(operation1(CGraphicsObject.x)); Console.WriteLine("Длина окужности:"); Console.WriteLine(result); Ellipse1 per1 = new Ellipse1(new area()); per1.Start(); Operation2 operation2 = per1.P1; double result2 = operation2(CGraphicsObject.a, CGraphicsObject.b); Console.WriteLine("Площядь элипса:"); Console.WriteLine(result2); Console.Read(); ArrayList numbersList = new ArrayList() { CGraphicsObject.x, CGraphicsObject.a, CGraphicsObject.b }; object obj = 10; numbersList.Add(obj); numbersList.RemoveAt(3); Console.WriteLine("Коллекция радиуса и длин большого и малого элипса: "); foreach (object o in numbersList) { Console.Write(o + " "); } }
static void Main(string[] args) { //Operation op = Double; Operation op = delegate(int num) { Console.WriteLine("{0} x 2 = {1}", num, num * 2); Console.WriteLine("{0} x 3 = {1}", num, num * 3); Console.WriteLine("{0} x 4 = {1}", num, num * 4); Console.WriteLine("{0} x 5 = {1}", num, num * 5); }; op(2); //======================================= Operation1 op1 = delegate(int num) { return(num * 2); }; int value = op1(2); Console.WriteLine(value); //======================================= Operation2 op2 = num => //(int num)=> { Console.WriteLine("{0} x 2 = {1}", num, num * 2); }; op2(2); //======================================= Operation2 op3 = num => Console.WriteLine("{0} x 2 = {1}", num, num * 2); op3(2); //======================================= Action <int> op4 = num => Console.WriteLine("{0} x 2 = {1}", num, num * 2); op4(5); //======================================= Func <int, int> op5 = num => { return(num * 5); }; Func <int, int> op6 = num => num * 6; Console.WriteLine(op5(2)); Console.WriteLine(op6(2)); }
static void Main(string[] args) { Octa per = new Octa(new Perim()); per.Start(); Operation operation1 = per.P; int result = Convert.ToInt32(operation1(CGraphicsObject.x1, CGraphicsObject.x2, CGraphicsObject.x3, CGraphicsObject.x4, CGraphicsObject.x5, CGraphicsObject.x6, CGraphicsObject.x7, CGraphicsObject.x8)); Console.WriteLine("Result (perimeter of the triangle):"); Console.WriteLine(result); Circletr per1 = new Circletr(new Perim1()); per1.Start(); Operation2 operation2 = per1.P1; int result2 = operation2(CGraphicsObject.r); Console.WriteLine("Result (perimeter of the rectangle):"); Console.WriteLine(result2); Console.Read(); ArrayList numbersList = new ArrayList() { CGraphicsObject.x1, CGraphicsObject.x2, CGraphicsObject.x3, CGraphicsObject.x4, CGraphicsObject.x5, CGraphicsObject.x6, CGraphicsObject.x7, CGraphicsObject.x8, CGraphicsObject.r, }; object obj = 10; numbersList.Add(obj); numbersList.RemoveAt(10); Console.WriteLine("Collection of octagon sides and radius: "); foreach (object o in numbersList) { Console.Write(o + " "); } }
public static R ExecuteOperation <R, T>(string subor, bool save, bool close, string ulozAko, Operation2 <R, Workbook, T> worker, T param) { Workbook workbook = Startup(subor); try { return(worker(workbook, param)); } finally { Cleanup(workbook, save, close, ulozAko); } }
static void Main() { /* Пример 1 */ Console.WriteLine("Пример 1: "); Message message; // Создаём переменную делегата if (DateTime.Now.Hour < 12) { message = GoodMorning; // Присваиваем этой переменной адрес метода } else { message = GoodEvening; } message(); // Вызываем метод /* Пример 2 */ Console.WriteLine("Пример 2: "); Operation operation = Add; // Указание на метода ADD int result = operation(4, 5); // Add 4 5 Console.WriteLine(result); operation = Multiply; // Указание на метод Multiply result = operation(4, 5); // Multiply 4 5 Console.WriteLine(result); /* Пример 3 */ Console.WriteLine("Пример 3: "); Math math = new Math(); Operation2 operation2 = math.Sum; // указание делегата на другой класс, где он не обьявлен int result2 = operation2(4, 5); Console.WriteLine(result2); /* Пример 4 */ Console.WriteLine("Пример 4: "); message = Hello; // Указываем на метод hello message += HowAreYou; // добавляем к нему метод howareyou message(); // Hello How Are you? в 2 строчки т.к вызываеются оба метода message += Hello; message += Hello; message(); // 3 раза вызывается Hello и один раз HowAreYou message -= HowAreYou; message(); // 3 раза вызывается Hello Message message1 = Hello; Message message2 = HowAreYou; Message message3 = message1 + message2; // Объединение делегатов значит, что в список вызова делегата mes3 попадут все методы из делегатов mes1 и mes2. message3(); /* Пример 5 */ Console.WriteLine("Пример 5: "); Message message4 = Hello; message4.Invoke(); // Другой способ вызова делегатов Operation operation3 = Add; int result3 = operation3.Invoke(3, 4); Console.WriteLine(result3); Message message5 = null; message5?.Invoke(); // При вызове делегата лучше проверять не равен ли он null не то исключение /* Пример 6 * Анонимный метод */ Console.WriteLine("Пример 6: "); MessageHandler handler = delegate(string mes) // Создание анонимного метода delegate ключевое слово { Console.WriteLine(mes); }; handler("Hello World"); ShowMessage("Hello", delegate(string mes) // Другой пример анононимных методов - передача в качестве аргумента для параметра { Console.WriteLine(mes); }); /* Если анонимный метод использует параметры, то они должны соответствовать параметрам делегата. * Если для анонимного метода не требуется параметров, то скобки с параметрами можно опустить * даже если делегет принимает несколько параметров исключение in out*/ MessageHandler handler1 = delegate { Console.WriteLine("Анонимный метод"); }; handler1("Hello world"); /* Так же как и обычное методы, анонимные могут возвращать результат */ Operation operation1 = delegate(int x, int y) { return(x + y); }; int d = operation1(4, 5); Console.WriteLine(d); /* При этом анонимный метод имеет доступ ко всем переменным, определенным во внешнем коде*/ int z = 8; Operation operation4 = delegate(int x, int y) { return(x + y + z); }; int j = operation4(4, 5); Console.WriteLine(j); // 17 /* Упражнение 1 */ Console.WriteLine("Упражение 1: "); Account accout = new Account(200); Account.AccountStateHandler colorDelegate = new Account.AccountStateHandler(Color_Message); /* Добавляем в делегат ссылку на методы */ accout.RegisterHandler(new Account.AccountStateHandler(Show_Message)); accout.RegisterHandler(colorDelegate); /* 2 раза снимаем деньги */ accout.withdraw(100); accout.withdraw(150); /* Удаляем делегат */ accout.UnregisterHandler(colorDelegate); accout.withdraw(50); }