什么是连接IPropertyChanged事件通知的正确方法?
以下哪两项是为IPropertyChangedNotification接口更改通知的正确方法?什么是连接IPropertyChanged事件通知的正确方法?
someObj.PropertyChanged += new PropertyChangedEventHandler(SomeObjPropChanged);
someObj.PropertyChanged += SomeObjPropChanged;
这两种似乎都有效,但我并没有真正清楚它们的区别。其中一个只是另一个的捷径,还是它可能与内存管理有关,并且无意中将它们放在一起? (我已经读过,接线变更通知和事件处理程序会导致潜在的内存泄漏,这要归功于对象无意中变得根深蒂固。)
因此,任何接受者?
M
我想你会发现它们导致相同的IL。
更新:
PropertyChanged += new PropertyChangedEventHandler(SomeEventHandler);
PropertyChanged += SomeEventHandler;
在IL结果使用反汇编:
IL_0006: l4zyOP
IL_0007: nop
//000011: PropertyChanged += new PropertyChangedEventHandler(SomeEventHandler);
IL_0008: ldarg.0
IL_0009: ldarg.0
IL_000a: ldftn instance void StackOverflow_5535253.SomeClass::SomeEventHandler(object, class [System]System.ComponentModel.PropertyChangedEventArgs)
IL_0010: newobj instance void [System]System.ComponentModel.PropertyChangedEventHandler::.ctor(object, native int)
IL_0015: call instance void StackOverflow_5535253.SomeClass::add_PropertyChanged(class [System]System.ComponentModel.PropertyChangedEventHandler)
IL_001a: nop
//000012: PropertyChanged += SomeEventHandler;
IL_001b: ldarg.0
IL_001c: ldarg.0
IL_001d: ldftn instance void StackOverflow_5535253.SomeClass::SomeEventHandler(object, class [System]System.ComponentModel.PropertyChangedEventArgs)
IL_0023: newobj instance void [System]System.ComponentModel.PropertyChangedEventHandler::.ctor(object, native int)
IL_0028: call instance void StackOverflow_5535253.SomeClass::add_PropertyChanged(class [System]System.ComponentModel.PropertyChangedEventHandler)
IL_002d: nop
someObj.PropertyChanged += SomeObjPropChanged
只是它是由C#编译器扩大到someObj.PropertyChanged += new PropertyChangedEventHandler(SomeObjPropChanged)
的快捷方式。我更喜欢第一种方式,因为它对我来说更清晰。
这就是我的想法,但我正在寻找一些不同的东西......例如文档或IL。 – MarqueIV 2011-04-04 06:48:13
绝对没有区别。
那是一个强大的字体! :) – MarqueIV 2011-04-04 06:47:51
我过度补偿。 – smartcaveman 2011-04-04 06:48:27
去过! :)我会和其他人一样对你提出同样的问题......你有没有提及这个事实,或者你能否提供一些示例IL? (我从来没有亲自玩过IL,所以我不知道如何检查自己。) – MarqueIV 2011-04-04 06:50:08
你证实了你自己吗?如果是这样,我很乐意看到一个例子。如果你发布一个,那就是它显示的内容,你会得到答案。 – MarqueIV 2011-04-04 06:47:24