草庐IT

c# - 使用 Wea​​kReference 解决 .NET 未注册事件处理程序导致内存泄漏的问题

问题:已注册的事件处理程序创建了从事件到事件处理程序实例的引用。如果该实例无法注销事件处理程序(大概是通过Dispose),那么垃圾收集器将不会释放实例内存。例子:classFoo{publiceventActionAnEvent;publicvoidDoEvent(){if(AnEvent!=null)AnEvent();}}classBar{publicBar(Fool){l.AnEvent+=l_AnEvent;}voidl_AnEvent(){}}如果我实例化一个Foo,并将其传递给一个新的Bar构造函数,然后释放Bar对象,由于AnEvent注册,它不会被垃圾收集器释放。我认

C#: ' += anEvent' 和 ' += new EventHandler(anEvent)' 之间的区别

采用以下代码:privatevoidanEvent(objectsender,EventArgse){//somecode}下面的有什么区别?[object].[event]+=anEvent;//and[object].[event]+=newEventHandler(anEvent);[更新]显然,两者之间没有区别......前者只是后者的语法糖。 最佳答案 没有区别。在您的第一个示例中,编译器将自动推断您想要实例化的委托(delegate)。在第二个示例中,您显式定义了委托(delegate)。委托(delegate)推理是在