挂接一个自引用的事件会导致内存泄漏吗?

Does hooking up an event that is self referencing cause a memory leak?

所以我有一个简单的 class:

public class GridButton : Button
{
    public event EventHandler OnClick;

    public GridButton()
    {
        this.Clicked += GridButton_Clicked;     
    }

    private void GridButton_Clicked(object sender, EventArgs e)
    {
        HandleTap();
    }

因为这是一个视图控件,所以我不负责何时释放此对象。

上面的代码是内存泄漏还是 GarbageCollector 足够聪明,可以计算出事件处理程序是自引用的,因此不会导致泄漏。

如果这是内存泄漏,正确的解决方案是什么?

我应该使用更多 WeakRefence 像这里列出的那个吗?

http://paulstovell.com/blog/weakevents

.NET 垃圾收集器将查找并删除循环 (this -> OnClick -> this.GridButton_Clicked)。

"Memory leaks" 在 .NET 中,当您说一个永远不会被释放的集合(例如列表、地图、事件等)(例如 global/static 变量,或在堆栈的开头向上,在程序期间不会超出范围),然后随着时间的推移不断向其中添加更多项目,但永远不要删除它们。

例如:

public GridButton()
{
    Globals.OnRefreshClicked += Refresh;     
}
private void Refresh()
{
   ...update text, state, whatever...
}

其中 "Globals" 是任何长寿的东西。现在,即使您从 GUI 中删除此按钮,除非您也删除该事件,否则 Globals.OnRefreshClicked -> this.Refresh 引用将使您的对象保持活动状态,至少与 Globals 一样长,这可能会持续到程序终止。