这两个中的哪一个是为IPropertyChangedNotification接口连接更改通知的正确方法?
someObj.PropertyChanged += new PropertyChangedEventHandler(SomeObjPropChanged);
someObj.PropertyChanged += SomeObjPropChanged;
这两个似乎都有效,但我并不清楚它们之间的区别。一个只是另一个的捷径,或者它是否可能与内存管理和无意中保持一致? (我已经读过,由于对象无意中被植根,导致更改通知和事件处理程序连接导致潜在的内存泄漏存在问题。)
所以任何人?
中号
答案 0 :(得分:3)
我认为你会发现他们会产生相同的IL。
更新
PropertyChanged += new PropertyChangedEventHandler(SomeEventHandler);
PropertyChanged += SomeEventHandler;
使用ildasm进行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
答案 1 :(得分:3)
答案 2 :(得分:0)
someObj.PropertyChanged += SomeObjPropChanged
只是一个由C#编译器扩展为someObj.PropertyChanged += new PropertyChangedEventHandler(SomeObjPropChanged)
的快捷方式。我更喜欢第一种方式,因为它看起来更清晰。