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

相關問題