我应该删除事件处理程序吗?

Nic*_*ick 6 c# event-handling

我有一个列表Button,并为每个按钮添加一个事件处理程序:

List<Button> buttons = new List<Button>();

for (int i = 0; i < 10; i++)
{
   Button btn = new Button();
   btn.Click = new RoutedEventHandler(OnbtnClick);
   buttons.Add(btn);
}
Run Code Online (Sandbox Code Playgroud)

然后我清除列表:

/* Have I to remove all events here (before cleaning the list), or not?
foreach (Button btn in buttons)
   btn.Click -= new RoutedEventHandler(OnbtnClick);
*/

buttons.Clear();
Run Code Online (Sandbox Code Playgroud)

Joe*_*ton 6

清除列表后,清除对处理程序的所有引用.一旦处理程序离开作用域(也就是说当函数最终退出并且没有对象引用创建的处理程序时),垃圾收集器将绕过去除所有相关内存(当然是按照自己的计划).

所以不,您不需要手动删除处理程序.