Делегат многоадрессный

115
08 декабря 2020, 07:40

Столкнулся с проблемой не могу понять,как решить, вот, что есть:

 public class Info
{
    public  delegate string Method(int Value, string Name);
    public Method deleg;
    public Method deleg_1;
    public Info()
    {
        deleg = Quadratic_Equation;
        deleg_1 = Quadratic_Equation;
        deleg_1 += Cubic_Equation;
    }
    private string Quadratic_Equation(int a,string Name)
    {
        Console.WriteLine("1 метод");
        return $"{Name} {a*a}";
    }
    private string Cubic_Equation(int a,string Name)
    {
        Console.WriteLine("2 метод");
        return $"{Name} {Math.Pow(a,3)}";
    }
}

Вызываю так:

        Info info = new Info();
        Console.WriteLine(info.deleg(3,"Уравнение 1")); 
        Console.WriteLine(info.deleg_1(3,"Уравнение 2")); 
        Console.ReadKey();

Как правильно вызвать делегат deleg_1, если как я Console.WriteLine(info.deleg_1(3,"Уравнение 2")); То выводит данные только последнего метода, который прикрепил к делегату, как сделать правильно, что бы выводило данные из 1 и 2 метода, прикрепленного к делегату?(

Answer 1

Чтобы Console.WriteLine два раза отработала её надо два раза вызывать.

deleg_1 в данном случае массив с двумя значениями. Чтобы Console.WriteLine два раза вызвалось надо включить его в обработку этого массива. Например, передать как аргумент:

public class Info
{
    public delegate void Method(int Value, string Name, Action<string> processResult);
    public Method deleg;
    public Method deleg_1;
    public Info()
    {
        deleg = Quadratic_Equation;
        deleg_1 = Quadratic_Equation;
        deleg_1 += Cubic_Equation;
    }
    private void Quadratic_Equation(int a, string Name, Action<string> processResult)
    {
        Console.WriteLine("1 метод");
        var result = $"{Name} {a * a}";
        processResult(result);
    }
    private void Cubic_Equation(int a, string Name, Action<string> processResult)
    {
        Console.WriteLine("2 метод");
        var result = $"{Name} {Math.Pow(a, 3)}";
        processResult(result);
    }
}
class Program
{
    static void Main(string[] args)
    {
        Info info = new Info();
        info.deleg(3, "Уравнение 1", Console.WriteLine);
        info.deleg_1(3, "Уравнение 2", Console.WriteLine);
        Console.ReadKey();
    }
}

Результат:

1 метод
Уравнение 1 9
1 метод
Уравнение 2 9
2 метод
Уравнение 2 27
READ ALSO
Многопоточность синхронизация

Многопоточность синхронизация

Как закончить работу программы корректно:

101
Логирование и сохранение в php monolog

Логирование и сохранение в php monolog

Всем привет, мне нужно сделать лог вставки в базу данных и сохранить этот лог в файлНаведите пожалуйста пример или документацию ибо я не нашел

113