C#委托如何访问创建委托对象的两个方法?

时间:2016-05-08 06:14:15

标签: c#

我是c#的新手我在这里有点混乱。我如何访问add&减法方法因为有两个参数?

public delegate double PerformCalculation(double n1, double n2);

class DelegateTest 
{
    public static void Main()
    {
        PerformCalculation rv = new PerformCalculation(Add);
        rv += Subtract;

        double x = rv(10,20);
    }

    public double Add(double n1, double n2)
    {
        Console.WriteLine("Calling Add ({0},{1})", n1, n2);
        return n1 + n2;
    }

    public double Subtract(double n1, double n2)
    {
        Console.WriteLine("Calling Subtract ({0},{1})", n1, n2);
        return n1 - n2;
    }
}

1 个答案:

答案 0 :(得分:1)

参数的数量并不相关;你的两个函数都匹配相同的签名(double, double),因此你可以创建一个委托。

C#使用委托链接。 Main()的前两行执行以下操作:

  1. (创建rv变量,然后,)将Add方法添加到委托调用列表中。
  2. Subtract方法添加到委托调用列表中。
  3. 当您的方法调用时,在下一行,它按顺序调用委托。首先它调用Add(带有两个参数),然后调用Subtract(使用相同的两个参数)。

    由于没有通过引用传递任何内容,因此在实验结束时x中存储的结果应该是Subtract函数的结果。

    如果你喜欢两者的结果,你应该做一些更全局确定的事情,比如设置一个类成员而不是只存储一个(最终)被覆盖的值。

    这就是说,您所做的并不是完全 .NET中委托的预期用途之一。但它没有错误

    除了测试平台使用代表的能力之外,您能描述一下您要完成的任务吗?