我现在是sandpitting
名代表
在以下示例中dd
引用了p.m
和 p.n
吗?
添加p.m
后,是否可以添加另一行以再次运行p.n
?或者我是否需要再次实施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;
}
}
答案 0 :(得分:6)
是的,在第一次分配(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
答案 1 :(得分:2)
//is there now a quick way to run p.m ?
是的,除了daryal的帖子,这可以通过以下方式完成(同时仍然维护多播委托):
p.GetInvocationList()[0].DynamicInvoke(new object[] { 3 });