Jul*_*ain 3 vb.net events subscription
在C#中,我习惯于清除对自定义事件的每个订阅,Dispose()以避免订阅者忘记取消订阅我的事件而导致内存泄漏.
这很简单,只需通过调用,MyEvent = null因为C#编译器会自动生成一个委托字段.不幸的是,在VB.NET中,似乎没有简单的方法可以做到这一点.我提出的唯一解决方案是编写一个Custom Event,添加自定义添加和删除处理程序调用Delegate.Combine/ Delegate.Remove,基本上是C#编译器的功能.但是为了能够清除订阅而必须为每个事件执行此操作似乎对我来说有点"过分".
有没有人有另一个想法来解决这个问题?谢谢.
它在VB.Net中完全相同.编译器会自动为每个事件创建一个委托字段,就像C#编译器一样,但在VB中字段是隐藏的.但是,您可以从代码中访问变量 - 它始终名为XXXEvent,其中XXX是事件名称.
因此,您可以轻松清除对事件的订阅,就像在C#中一样:
Public Class Class1
Implements IDisposable
Event MyEvent()
Sub Clear() Implements IDisposable.Dispose
Me.MyEventEvent = Nothing ' clear the hidden variable '
End Sub
End Class
Run Code Online (Sandbox Code Playgroud)
我也认为应该可以使用反射来自动查找所有隐藏的委托变量,并清除它们.然后它们不必在Clear方法中列出.