猿问

C#中的取消订阅匿名方法

C#中的取消订阅匿名方法

是否可以从事件中取消订阅匿名方法?

如果我订阅这样的活动:

void MyMethod(){
    Console.WriteLine("I did it!");}MyEvent += MyMethod;

我可以这样取消订阅:

MyEvent -= MyMethod;

但如果我使用匿名方法订阅:

MyEvent += delegate(){Console.WriteLine("I did it!");};

是否可以取消订阅此匿名方法?如果是,怎么做?



慕后森
浏览 925回答 3
3回答

Cats萌萌

Action myDelegate = delegate(){Console.WriteLine("I did it!");};MyEvent += myDelegate;// .... laterMyEvent -= myDelegate;只需保持对代表的引用。

一只萌萌小番薯

一种技术是声明一个变量来保存匿名方法,然后匿名方法本身就可用了。这对我有效,因为所希望的行为是在事件处理后取消订阅。例子:MyEventHandler foo = null;foo = delegate(object s, MyEventArgs ev)     {         Console.WriteLine("I did it!");         MyEvent -= foo;     };MyEvent += foo;

倚天杖

从内存中看,当涉及到使用匿名方法创建的委托的等效性时,规范显式地不保证这种行为。如果您需要取消订阅,您应该使用“普通”方法,或者在其他地方保留委托,这样您就可以完全使用您以前订阅的委托取消订阅。
随时随地看视频慕课网APP
我要回答