如何在类的Dispose方法中取消订阅匿名函数?

Rel*_*ity 5 c# dispose anonymous-function unsubscribe

我有一个A类...在它的构造函数中...我正在为Object_B的eventHandler分配一个匿名函数.

如何从A类的Dispose方法中删除(取消订阅)?

任何帮助,将不胜感激 !谢谢

Public Class A
{

public A()
 {

 B_Object.DataLoaded += (sender, e) =>
                {
                   Line 1
                   Line 2
                   Line 3
                   Line 4
                };
 }

Public override void Dispose()
{
  // How do I unsubscribe the above subscribed anonymous function ?
}
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 7

基本上你不能.将其移动到方法中,或使用成员变量来保留委托以供以后使用:

public class A : IDisposable
{
    private readonly EventHandler handler;

    public A()
    {
        handler = (sender, e) =>
        {
           Line 1
           Line 2
           Line 3
           Line 4
        };

        B_Object.DataLoaded += handler;
     }

     public override void Dispose()
     {
        B_Object.DataLoaded -= handler;
     }
}
Run Code Online (Sandbox Code Playgroud)

  • @相对性:如果对象X订阅了对象Y的任何事件但未取消订阅,则悬空事件将导致对象X停留在内存中的时间至少与对象Y一样长。如果对象Y的内存寿命将比对象Y长得多。对象X的使用寿命,这可能是一件坏事。如果在对象Y的内存生存期内,将创建并放弃对象X的许多实例,那么即使不是灾难性的,也可能非常糟糕。但是,如果在X变得无用时Y将有资格进行收集,那么悬空的订阅将不会使X保持活动状态。 (2认同)