c# - 使用一个委托(delegate)引用多个方法

标签 c# delegates

我目前正在打沙委托(delegate)。
在下面的示例中,dd 是否引用了 p.m p.n
我可以在添加 p.n 之后再添加一行来再次运行 p.m 吗?或者我需要再次实现 d dd = p.m; 吗?

class Program
{
    private delegate int d(int x);

    static void Main(string[] args)
    {
        Program p;
        p = new Program();

        d dd = p.m;//d dd = new d(p.m);
        Console.WriteLine(dd(3).ToString());

        dd += p.n;//dd += new d(p.n);
        Console.WriteLine(dd(3).ToString());

        //<<is there now a quick way to run p.m ?

        Console.WriteLine("press [enter] to exit");
        Console.ReadLine();
    }

    private int m(int y)
    {
        return y * y;
    }
    private int n(int y)
    {
        return y * y - 10;
    }
}

最佳答案

是的,在第一次赋值 (d dd = this.m;) 之后,所有使用 += 进行的赋值也将被调用。

你可以只删除一个方法,使用-=,引用下面的例子;

d dd = p.m;//d dd = new d(p.m);
Console.WriteLine(dd(3).ToString()); //calls p.m

dd += p.n;//dd += new d(p.n);
Console.WriteLine(dd(3).ToString()); //calls boths p.m and p.n

dd -= p.n;
Console.WriteLine(dd(3).ToString()); // only calls p.m

关于c# - 使用一个委托(delegate)引用多个方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14725149/

相关文章:

javascript - JS 中获取 HiddenField 的值并传入 var

c# - 通过反射创建委托(delegate)

vb.net - VB.NET 中作为参数的委托(delegate)

c# - 没有内存分配的委托(delegate)关闭

c# - 有没有办法达到通过引用传递 "event"的效果?

javascript - 数据集返回 JavaScript AngularJS

c# - 如何从默认选项创 build 置文件?

c# - 从按树顺序排序的树创建平面列表

c# - 处理 KeyNotFoundException 的最佳方法

macos - 为什么我的 NSView 委托(delegate)方法没有被调用?