コード例 #1
0
        private static void SecondExample()
        {
            var calc1 = new DoCalculation(Show1);
            var calc2 = new DoCalculation(Show2);

            // Как очеред, первым скомбинирован  - первым выполнится
            // Если возвращается значение, это значение будет того, кто выполнился последним
            var combine = (DoCalculation)Delegate.Combine(calc1, calc2);

            //DoCalculation combine = null;
            //combine += calc1; //(DoCalculation)Delegate.Combine(combine, calc1);
            //combine += calc2; //(DoCalculation)Delegate.Combine(combine, calc2);

            //combine -= calc2; //(DoCalculation)Delegate.Remove(combine, calc1);

            //// Если результатом оказывается пустой список вызова, возвращается null.
            //// Тут как раз это и происходит => combine is null !!!!!!
            //combine -= calc1; //(DoCalculation)Delegate.Remove(combine, calc1);

            Calc instance = new EngCalc(10);

            string s = combine((EngCalc)instance);

            Console.WriteLine(s);
        }
コード例 #2
0
        static void Main(string[] args)
        {
            DoCalculation doCalculation1 = SimpleCalculator.Sum;
            DoCalculation doCalculation2 = SimpleCalculator.Multiply;

            // operator +=
            doCalculation1 += doCalculation2;

            // static method Delegate.Combine
            doCalculation1 = (DoCalculation)Delegate.Combine(
                doCalculation1, doCalculation2);

            var multipleResult = doCalculation1(10, 5);

            Console.WriteLine($"{nameof(multipleResult)} = {multipleResult}");

            Console.WriteLine("\n***\n");

            // operator -=
            doCalculation1 -= doCalculation2;

            // method Remove()
            doCalculation1 = (DoCalculation)Delegate.Remove(
                doCalculation1, doCalculation2);

            multipleResult = doCalculation1(10, 5);
            Console.WriteLine($"{nameof(multipleResult)} = {multipleResult}");
        }
コード例 #3
0
        static void Main(string[] args)
        {
            DoCalculation action1 = Sum;             // assuming this method defined

            Console.WriteLine($"{action1(1, 2)}");

            DoCalculation action2 = (int x, int y) => x * y;

            Console.WriteLine($"{action2(3, 5)}");

            DoCalculation action3 =
                (x, y) =>
            {
                int z = x * y;
                return(z);
            };

            Console.WriteLine($"{action2(3, 5)}");

            // you can omit parentheses in case of the single parameter
            Action <string> action4 = x => Console.WriteLine(x);

            action4("test");

            // you should use empty parentheses in case of absense ot the parameters
            Func <float> getPi = () => MathF.PI;

            Console.WriteLine(getPi());
        }
コード例 #4
0
    public Main()
    {
        //In use
        DoCalculation calc = new DoCalculation();

        calc.StartCalculation(123, 188, ReceivedResults);
        //Cancel after 1sec
        Thread.Sleep(1000);
        calc.CancelProcess();
    }
コード例 #5
0
 public Calculator(DoCalculation operation)
 {
     Operation = operation;
 }