// Método de inicialização static void Main(string[] args) { // Atribuindo uma função lambda (função anônima) ao delegate: DelCalc delCalc = (x, y, operation) => { switch (operation) { case '+': return(x + y); case '-': return(x - y); case '*': return(x * y); case '/': return(x / y); default: return(x + y); } }; /* * Agora, com a função anônima encapsulada na 'variável/delegate' 'delCal', podemos passar ela como parâmetro para outros métodos, e * a qualquer momento executála através da palavra chave 'Invoke': */ var result = delCalc.Invoke(5, 2, '*'); Console.WriteLine(result); }
static void Main(string[] args) { DelCalc d1 = Calc.Add; //створили екзмепляр делегата, який посилається на стат.метод Calc.Add Console.WriteLine("d1 = Calc.Add; d1(2, 3) : {0}", d1(2, 3)); //виклик методу через делегат Console.WriteLine("Method.Name : {0}\nTarget : {1}", d1.Method.Name, d1.Target); //інформація про метод(екз MethodInfo), інформація про обєкт(object)- тут null d1 = Calc.Sub; //тут d1 посилається на стат.метод Calc.Add Console.WriteLine("\nd1 = Calc.Sub; d1(2, 3) : {0}", d1(2, 3)); Console.WriteLine("\nd1.Invoke(20, 15); : {0}", d1.Invoke(20, 15)); //виклик методу через делегат Console.WriteLine("Method.Name : {0}\nTarget : {1}", d1.Method.Name, d1.Target); //Target = null, метод статичний Calc calc = new Calc(10); d1 = calc.Mult; Console.WriteLine("\nd1 = Calc.Mult; d1(3, 4) : {0}", d1(3, 4)); Console.WriteLine("Method.Name : {0}\nTarget : {1}", d1.Method.Name, d1.Target);// Target = calc Console.WriteLine("\nd1 = Calc.Mult; d1(2, 5) : {0}", d1(21, 5)); Console.WriteLine("Method : {0}\nTarget : {1}", d1.Method, d1.Target); Console.WriteLine("\ncalc : {0}", calc); DelCalc d2 = new DelCalc(Calc.Add); //створили екзмепляр делегата Console.WriteLine("\nDelCalc d2 = new DelCalc(Calc.Add);\nd2(340, 120) : {0}", d2(340, 120)); Console.WriteLine("\nd2.Invoke(100, 111) : {0}\n", d2.Invoke(100, 111)); }
static void Main(string[] args) { DelCalc d1 = new DelCalc(Calc.Add); // створила екземпляр делегата, який посилається // на статичний метод класу Calc Console.WriteLine("d1 = Calc.Add; d1(23,1) = {0}", d1(23, 1)); Console.WriteLine($"Method name: {d1.Method.Name} \n Target name: {d1.Target}"); // інформація про об'єкт // Target = null - бо метод статичний d1 = Calc.Sub; Console.WriteLine("d1 = Calc.Sub; d1(23,1) = {0}", d1.Invoke(23, 1)); Console.WriteLine($"Method name: {d1.Method.Name} \n Target name: {d1.Target}"); // інформація про об'єкт Calc calc = new Calc(10); d1 = calc.Mult; Console.WriteLine("d1 = Calc.Mult; d1(3,4) = {0}", d1(3, 4)); Console.WriteLine($"Method name: {d1.Method.Name} \n Target name: {d1.Target}"); // інформація про об'єкт DelCalc d2 = new DelCalc(Calc.Add); if (d2 != null) { Console.WriteLine(d2(3, 5)); } Console.WriteLine(d2?.Invoke(3, 5)); }
// Método de inicialização static void Main(string[] args) { // Vamos atribuir o método 'Calcular' declarado acima para o Delegate 'DelCalc' criado anteriormente: DelCalc delCalc = Calculate; // Agora, com a função 'Calculate' encapsulada na 'variável/delegate' 'delCal', podemos passar ela como parâmetro para outros métodos: var result = ExecuteCalculate(delCalc); Console.WriteLine(result); }
static void Main() { // Enable Unicode Console.OutputEncoding = Encoding.Unicode; // випадкові числа Random rnd = new Random(); // випадкові цілі числа (великі числа погіршують читабельність) #region Створення цілих чисел double[] ab = new double[] { rnd.Next(sbyte.MinValue, sbyte.MaxValue), rnd.Next(sbyte.MinValue, sbyte.MaxValue) }; // виведення на екран Console.WriteLine("\nЗгенеровані випадкові числа:\n"); Console.WriteLine($"\tA = {ab[0]:N0}"); Console.WriteLine($"\tB = {ab[1]:N0}\n"); #endregion // створення змінної делегата // не бачу смисла виносити окремо виведення інформації // за межи лямда-виразу, вважаємо що резульатат - // це повернення виведення виразу в консоль DelCalc delCalc = (a, b) => Console.WriteLine($"\t{a} + {b} = {a + b:N0}"); delCalc += (a, b) => Console.WriteLine($"\t{a} - {b} = {a - b:N0}"); delCalc += (a, b) => Console.WriteLine($"\t{a} * {b} = {a * b:N0}"); delCalc += (a, b) => { double temp = default; if (a == 0 && b == 0) { temp = double.NaN; } else if (a > 0 && b == 0) { temp = double.PositiveInfinity; } else if (a < 0 && b == 0) { temp = double.NegativeInfinity; } else { temp = a / b; } Console.WriteLine($"\t{a} / {b} = {temp:N2}"); }; // вивід результату delCalc(ab[0], ab[1]); // повторення DoExitOrRepeat(); }
static decimal ExecuteCalculate(DelCalc delCalc) { // Aqui recebemos um método encapsulado em um delegate, e o executamos através da palavra chave 'Invoke', passando os argumentos necessários: return(delCalc.Invoke(5, 2, '*')); }
static void Main(string[] args) { double firstNumber, secondNumber; Console.Write("please enter the valu of x = "); firstNumber = Convert.ToDouble(Console.ReadLine()); //string matOperator = Console.ReadLine(); Console.Write("please enter the valu of y = "); secondNumber = Convert.ToDouble(Console.ReadLine()); double DoDivision(double x, double y) { if (y == 0) { Console.WriteLine("you cant divide by 0"); return(double.NaN); } else { return(x / y); } } double DoMultiplication(double x, double y) { return(x * y); } double DoSubtraction(double x, double y) { return(x - y); } double DoAddition(double x, double y) { return(x + y); } double DoRemainder(double x, double y) { return(x % y); } double DoDegree(double x, double y) { return(Math.Pow(x, y)); } DelCalc delCalc1 = new DelCalc(DoAddition); DelCalc delCalc2 = new DelCalc(DoSubtraction); DelCalc delCalc3 = new DelCalc(DoMultiplication); DelCalc delCalc4 = new DelCalc(DoDivision); DelCalc delCalc5 = new DelCalc(DoRemainder); DelCalc delCalc6 = new DelCalc(DoDegree); Console.WriteLine(); Console.Write("x + y = "); Console.WriteLine(delCalc1(firstNumber, secondNumber)); Console.Write("x - y = "); Console.WriteLine(delCalc2(firstNumber, secondNumber)); Console.Write("x * y = "); Console.WriteLine(delCalc3(firstNumber, secondNumber)); Console.Write("x / y = "); Console.WriteLine(delCalc4(firstNumber, secondNumber)); Console.Write("x % y = "); Console.WriteLine(delCalc5(firstNumber, secondNumber)); Console.Write("x ^ y = "); Console.WriteLine(delCalc6(firstNumber, secondNumber)); Console.ReadKey(); }