2015-06-29 18 views
12

ben sonra INotifyPropertyChanged arayüzünü uygular beyan bir sınıf varsa, ReSharper otomatik olarak bu uygulamayı oluşturur: Hep düzenlediğimdenDüzenleme ReSharper'ın INotifyPropertyChanged

public event PropertyChangedEventHandler PropertyChanged; 

[NotifyPropertyChangedInvocator] 
protected virtual void OnPropertyChanged(string propertyName) 
{ 
    var handler = PropertyChanged; 
    if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); 
} 

bu olması:

public event PropertyChangedEventHandler PropertyChanged = delegate { }; 

[NotifyPropertyChangedInvocator] 
protected virtual void OnPropertyChanged(string propertyName) 
{ 
    PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
} 

Can Otomatik olarak oluşturulmuş kodu nasıl düzenlerim? Resharper'ın belgeleri benim için açık olandan daha az.

+3

İplik güvenliğini kaldırmak neden bu kadar önemlidir? Kopyala> onay> invike en iyi uygulamadır. –

+2

VS 2015 kullanıyorsanız, C# 6 standartlarına geçmek isteyip istemediğinizi anlayabiliyordum, ancak burada açıklanan değişiklik yapmak için zayıf bir değişiklik ... –

+0

Birisi bana bu kodu değiştirmenin iplik güvenliğini nasıl değiştirdiğini açıklayabilir mi? Bunun neden kötü bir seçim olduğunu anlamıyorum. Etkinlik tanımlandıysanız ve _never_ null olduğunda neden kopyalama/kontrol etme/çağırma yapmanız gerekiyor? Savaşçı olmamak; Gerçekten anlamıyorum. –

cevap

5

Hayır, otomatik olarak oluşturulan kodu düzenleyemezsiniz, çünkü oluştururken çeşitli olasılıkları ele alması gerekir - örn. C# 6, ?. işlecini kullanır ve olay zaten mevcut olduğunda ve zaten başlatılmışsa da işlem görmesi gerekir.

Yerel değişkeni olmayan null sürümünü ve null onayını kullanmak istiyorsanız, önce olayı oluşturabilir ve OnPropertyChanged yöntemini oluşturmadan önce =() => { }; ile başlatabilirsiniz. Bununla birlikte, iplik güvenliği için yerel var + sıfır kontrolünü tutmak en iyisidir.

+0

Anlamıyorum. Olayı yaratıyorum ve '= delegate {}' ile başlatalım: temelde aynı şey. Bu iş parçacığının güvenli olmadığını nasıl detaylandırabilir misiniz? –

+1

Hayır, haklısın. "Delegeye {}" sürümü iş parçacığı için güvenlidir. Yerel var + null çekiyle ilgili sorun, bir olay işleyicisinin çağırıldığından emin olmaktır ve etkinliği doğrudan kullanırsanız bir iş parçacığı güvenliği sorunu vardır. Boş delege ile en az bir olay işleyicisi bulunduğundan emin olarak, bu iş parçacığı güvenliği sorunu ele alınır. – citizenmatt

+0

Sonucunuza katılıyorum, ancak sizin öneriniz değil. Özelleştirme budur; Her olasılığı ele alması beklenmiyor. Örneğinizi kullanmak için, özelleştirilmiş bir propertyChanged şablonu oluşturursam, kullanmayı söylediğim tam sözdizimini kullanmasını kesinlikle istiyorum. Standarda eklenip eklenmediği önemli değil. Kullanmasını söylemedim. Özelleştirmeyi güncellemeye karar verdiysem veya varsayılana geri dönmeye karar verdiysem, o zaman “?” Yi kullanabilir. @ScottSEA Maalesef, belirtildiği gibi, şu anda Resharper'da bir seçenek değil *. Ancak, bir özellik isteği olarak gönderirim. – Taekahn

İlgili konular