Ejemplo n.º 1
0
        /// <summary>
        /// Использование делегата
        /// </summary>
        // метод с делегатным параметром
        static void MultOrDivMethod(string str, int i1, int i2, MultOrDiv MultOrDivParam)
        {
            //вызов (имя параметра как функция)
            int Result = MultOrDivParam(i1, i2);

            Console.WriteLine(str + Result.ToString());
        }
Ejemplo n.º 2
0
        static void Main(string[] args)
        {
            int i1 = 6; int i2 = 2;

            //вызов методов с делегатным параметром
            MultOrDivMethod("Умножение: ", i1, i2, Mult);
            MultOrDivMethod("Деление: ", i1, i2, Div);
            //Создание экземпляра делегата на основе метода (с помощью конструктора делегатного типа)
            MultOrDiv md1 = new MultOrDiv(Mult);

            MultOrDivMethod("Создание экземпляра делегата на основе метода: ", i1, i2, md1);
            //Создание экземпляра делегата на основе 'предположения' делегата
            //Компилятор 'пердполагает' что метод Mult типа делегата
            MultOrDiv md2 = Mult;

            MultOrDivMethod("Создание экземпляра делегата на основе 'предположения' делегата: ", i1, i2, md2);
            //Создание анонимного метода
            MultOrDiv md3 = delegate(int param1, int param2)
            {
                return(param1 * param2);
            };

            MultOrDivMethod("Создание экземпляра делегата на основе анонимного метода: ", i1, i2, md2);
            MultOrDivMethod("Создание экземпляра делегата на основе лямбдавыражения 1: ", i1, i2, (int x, int y) => { int z = x * y; return(z); });
            MultOrDivMethod("Создание экземпляра делегата на основе лямбдавыражения 2: ", i1, i2, (x, y) => { return(x * y); });
            MultOrDivMethod("Создание экземпляра делегата на основе лямбдавыражения 3: ", i1, i2, (x, y) => x * y);
            //////////////////////////////////////////////////////////////
            Console.WriteLine("\n\nИспользование обощенного делегата Func<>");
            MultOrDivFunc("Создание экземпляра делегата на основе метода: ", i1, i2, Mult);
            string OuterString = "ВНЕШНЯЯ ПЕРЕМЕННАЯ";

            MultOrDivFunc("Создание экземпляра делегата на основе лямбдавыражения 1: ", i1, i2, (int x, int y) => { Console.WriteLine("Эта переменная объявлена вне лямбдавыражения: " + OuterString); int z = x * y; return(z); });
            MultOrDivFunc("Создание экземпляра делегата на основе лямбдавыражения 2: ", i1, i2, (x, y) => { return(x * y); });
            MultOrDivFunc("Создание экземпляра делегата на основе лямбдавыражения 3: ", i1, i2, (x, y) => x * y);
            //////////////////////////////////////////////////////////////
            //Групповой делегат всегда возвращает значение типа void
            Console.WriteLine("Пример группового делегата");
            Action <int, int> a1    = (x, y) => { Console.WriteLine("{0} * {1} = {2}", x, y, x * y); };
            Action <int, int> a2    = (x, y) => { Console.WriteLine("{0} / {1} = {2}", x, y, x / y); };
            Action <int, int> group = a1 + a2;

            group(6, 2);
            Action <int, int> group2 = a1; Console.WriteLine("Добавление вызова метода к групповому делегату");

            group2 += a2;
            group2(10, 5);
            Console.WriteLine("Удаление вызова метода из группового делегата");
            group2 -= a1;
            group2(20, 10);
            Console.ReadLine();
        }
Ejemplo n.º 3
0
        static void MultOrDivMethod(string str, float f1, float f2, MultOrDiv MultOrDivParam)
        {
            string Res = MultOrDivParam(str, f1, f2);

            Console.WriteLine(Res);
        }
Ejemplo n.º 4
0
 static double Sample(double a, double b, MultOrDiv par)
 {
     return(par(a, b));
 }