Как правильно связать уведомления о событиях для IPropertyChanged? - PullRequest
0 голосов
/ 04 апреля 2011

Какой из этих двух способов является правильным способом подключения уведомления об изменении для интерфейса IPropertyChangedNotification?

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

Кажется, что оба из них работают, но я не совсем понимаю разницу.Является ли один просто ярлыком для другого, или это может быть случайно связано с управлением памятью и непреднамеренным хранением вещей?(Я читал, что существуют проблемы с подключением уведомлений об изменениях и обработчиков событий, приводящих к возможным утечкам памяти из-за непреднамеренного укоренения объектов.)

Так что, кто-нибудь из пользователей?

Ответы [ 3 ]

3 голосов
/ 04 апреля 2011

Нет абсолютно никакой разницы.

3 голосов
/ 04 апреля 2011

Я думаю, вы обнаружите, что они приводят к одному и тому же IL.

Обновление:

PropertyChanged += new PropertyChangedEventHandler(SomeEventHandler);
PropertyChanged += SomeEventHandler;

Результаты по ИЛ с использованием ildasm:

    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 голосов
/ 04 апреля 2011

someObj.PropertyChanged += SomeObjPropChanged - это просто ярлык, который расширяется до someObj.PropertyChanged += new PropertyChangedEventHandler(SomeObjPropChanged) компилятором C #.Я предпочитаю первый способ, потому что он мне понятнее.

...