0

以下哪两项是为IPropertyChangedNotification接口更改通知的正确方法?什么是连接IPropertyChanged事件通知的正确方法?

someObj.PropertyChanged += new PropertyChangedEventHandler(SomeObjPropChanged); 
someObj.PropertyChanged += SomeObjPropChanged; 

这两种似乎都有效,但我并没有真正清楚它们的区别。其中一个只是另一个的捷径,还是它可能与内存管理有关,并且无意中将它们放在一起? (我已经读过,接线变更通知和事件处理程序会导致潜在的内存泄漏,这要归功于对象无意中变得根深蒂固。)

因此,任何接受者?

M

回答

3

我想你会发现它们导致相同的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 
+0

你证实了你自己吗?如果是这样,我很乐意看到一个例子。如果你发布一个,那就是它显示的内容,你会得到答案。 – MarqueIV 2011-04-04 06:47:24

0

someObj.PropertyChanged += SomeObjPropChanged只是它是由C#编译器扩大到someObj.PropertyChanged += new PropertyChangedEventHandler(SomeObjPropChanged)的快捷方式。我更喜欢第一种方式,因为它对我来说更清晰。

+0

这就是我的想法,但我正在寻找一些不同的东西......例如文档或IL。 – MarqueIV 2011-04-04 06:48:13

3

绝对没有区别。

+0

那是一个强大的字体! :) – MarqueIV 2011-04-04 06:47:51

+0

我过度补偿。 – smartcaveman 2011-04-04 06:48:27

+0

去过! :)我会和其他人一样对你提出同样的问题......你有没有提及这个事实,或者你能否提供一些示例IL? (我从来没有亲自玩过IL,所以我不知道如何检查自己。) – MarqueIV 2011-04-04 06:50:08

相关问题