Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用新处理程序附加Eventhandler与直接分配Eventhandler_C#_Events_Syntax - Fatal编程技术网

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;