我对这篇文章有疑问: http://davybrion.com/blog/2009/09/event-subscribtion-and-memory-leaks-yet-again/
我在vb.net中发生了内存泄漏事件。我用内存分析器查看我的应用程序,它说我的问题是事件: - (
现在我发现了这篇文章,我想尝试一下。但我不知道delegate{}
是什么
public event EventHandler<EventArgs> MyEvent = delegate { };
表示。
答案 0 :(得分:3)
它只是一个空的事件处理程序,存在(因此不需要检查null
)但什么都不做。以下代码片段基本相同:
// An anonymous delegate (your example):
public event EventHandler<EventArgs> MyEvent = delegate { };
// The same function using Lambda:
public event EventHandler<EventArgs> MyEvent = (sender, e) => { };
// A similar function using a named method:
public event EventHandler<EventArgs> MyEvent = Handler;
private static void Handler(object sender, EventArgs eventArgs) { }
转换为VB.Net:
Public Class SomeClass
Public Event MyEvent(ByVal sender As Object, ByVal e As EventArgs)
// The following sub is the empty delegate
Private Sub Handler(ByVal sender As Object, ByVal e As EventArgs) _
Handles Me.MyEvent
// empty
End Sub
End Class
答案 1 :(得分:1)
这只是一种偷偷摸摸的方式,可以避免对事件进行无效检查;基本上,它使用匿名方法作为初始值,但该方法不执行任何操作。作为一个实现细节,这个空委托实例实际上被缓存在静态字段中,因此它不会对每个实例产生巨大影响。
如果您不想担心{}
,请将其关闭:
public event EventHandler MyEvent;
并进行空检查!