C# 使用新处理程序附加Eventhandler与直接分配Eventhandler
创建新事件处理程序与直接将其分配给事件处理程序的实际区别、优点和缺点是什么C# 使用新处理程序附加Eventhandler与直接分配Eventhandler,c#,events,syntax,C#,Events,Syntax,创建新事件处理程序与直接将其分配给事件处理程序的实际区别、优点和缺点是什么 _gMonitor.CollectionChanged += new NotifyCollectionChangedEventHandler(OnCollectionChanged); vs 在C#2.0及更高版本中,它们是相同的。在C#1.2(与.NET1.1一起提供的)中,只有第一个语法(使用new)可以编译-p 第二种语法可以保存按键,但VS intellisense通常会建议使用第一种语法。归根结底,这没什么区
_gMonitor.CollectionChanged += new NotifyCollectionChangedEventHandler(OnCollectionChanged);
vs
在C#2.0及更高版本中,它们是相同的。在C#1.2(与.NET1.1一起提供的)中,只有第一个语法(使用new
)可以编译-p
第二种语法可以保存按键,但VS intellisense通常会建议使用第一种语法。归根结底,这没什么区别。我通常在在线代码示例中使用第二种语法,因为它避免了(窄)列宽 编译器有足够的可用信息使
新事件处理程序
有效
它知道您正在将事件处理程序附加到事件,因为此时只有
+=
和-=
是有效的,所以您不需要告诉它该怎么做。我认为第一个会造成内存泄漏问题,但我找不到任何证据来证明这一点。但是我在过去遇到过这样的问题,windows服务并不是因为timer.Tick+=newhandler\u Tick(timer\u Tick方法)而关闭的代码>不是timer.Tick+=timer\u Tick方法代码>和取消订阅没有帮助,因此使用timer.Tick+=newhandler\u Tick(timer\u Tick方法)代码>@HarshBaid您不正确;它们编译成完全相同的东西。对于info,代理取消订阅基于MethodInfo和实例上的匹配;它不需要是同一个实际的委托实例就可以正确地取消订阅\u gMonitor.CollectionChanged-=OnCollectionChanged
或\u gMonitor.CollectionChanged+=new NotifyCollectionChangedEventHandler(OnCollectionChanged)
,它会与第一个选项一起工作吗?@mark hm我想你是对的,我会将其与取消订阅事件处理程序混合使用:P@LouisRhys同样,除了“一个是订阅,一个是取消订阅”,它们是相同的,可能重复的
_gMonitor.CollectionChanged += OnCollectionChanged;