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); }
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}"); }
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()); }
public Main() { //In use DoCalculation calc = new DoCalculation(); calc.StartCalculation(123, 188, ReceivedResults); //Cancel after 1sec Thread.Sleep(1000); calc.CancelProcess(); }
public Calculator(DoCalculation operation) { Operation = operation; }