为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
慕后森 2019-06-29 17:56:09
C#中的取消订阅匿名方法是否可以从事件中取消订阅匿名方法?如果我订阅这样的活动:void MyMethod(){     Console.WriteLine("I did it!");}MyEvent += MyMethod;我可以这样取消订阅:MyEvent -= MyMethod;但如果我使用匿名方法订阅:MyEvent += delegate(){Console.WriteLine("I did it!");};是否可以取消订阅此匿名方法?如果是,怎么做?
查看完整描述

3 回答

?
Cats萌萌

TA贡献1805条经验 获得超9个赞

Action myDelegate = delegate(){Console.WriteLine("I did it!");};MyEvent += myDelegate;// .... laterMyEvent -= myDelegate;

只需保持对代表的引用。


查看完整回答
反对 回复 2019-06-29
?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

一种技术是声明一个变量来保存匿名方法,然后匿名方法本身就可用了。这对我有效,因为所希望的行为是在事件处理后取消订阅。

例子:

MyEventHandler foo = null;foo = delegate(object s, MyEventArgs ev)
    {
        Console.WriteLine("I did it!");
        MyEvent -= foo;
    };MyEvent += foo;


查看完整回答
反对 回复 2019-06-29
?
倚天杖

TA贡献1828条经验 获得超3个赞

从内存中看,当涉及到使用匿名方法创建的委托的等效性时,规范显式地不保证这种行为。

如果您需要取消订阅,您应该使用“普通”方法,或者在其他地方保留委托,这样您就可以完全使用您以前订阅的委托取消订阅。


查看完整回答
反对 回复 2019-06-29
  • 3 回答
  • 0 关注
  • 924 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信