SORU
24 HAZİRAN 2012, Pazar


&; Temsilci çıkarma sonucu tahmin edilemez" ReSharper/C"#?

myDelegate -= eventHandler ReSharper (sürüm 6) sorunlar kullanırken:

Temsilci çıkarma sonucu tahmin edilemez

Bunun arkasındaki rasyonel explained by JetBrains here. Açıklama mantıklı ve okuduktan sonra, delegeler üzerinde - tüm kullanır şüphe etmeye başladım.

Nasıl o zaman,

  • ReSharper huysuz yapmadan oto dışı bir olay yazabilirim?
  • ya da, daha iyi ve/veya "doğru" bir şekilde bunu uygulamak için?
  • ya da, ReSharper görmezden gelebilir miyim?

Burada basitleştirilmiş kod:

public delegate void MyHandler (object sender);

MyHandler _myEvent;

public event MyHandler MyEvent
{
    add
    {
        _myEvent  = value;
        DoSomethingElse();
    }
    remove
    {
        _myEvent -= value; // <-- ReSharper warning here
    }
}

CEVAP
24 HAZİRAN 2012, Pazar


Yok maalesef! yok ol ReSharper uyarısı ilk bölümü sadece delege çıkarma listeleri için geçerlidir. Kodunuzda, her zaman tek bir temsilci çıkarma. İkinci bölüm yinelenen bir temsilci uzaklaştırıldıktan sonra delegelerin sipariş bahsediyor. Olay gerçekten de etkilemiyor yani aboneler için icra emri garantisi yok.

Yukarıdaki mekaniği öngörülemeyen sonuçlara yol açabilir beri, ReSharper temsilci çıkarma operatörü karşılaştığında bir uyarı verir.

Çok noktaya yayın temsilci çıkarma sorunlar olabilir çünkü bu uyarı verme ReSharper, bu dili tamamen kınayan bir özellik değil. Neyse ki bu sorunlar saçak durumda ve onları karşılaşmanız olası değildir sadece basit olayları açıklamak. add/remove kendi işleyicileri uygulamak için iyi bir yol yoktur-sadece dikkat çekmek.

"Genellikle yararlı. hangi uyarıları, hassasiyeti alamadım" bu kadar İpucu bu mesaj için konuştu ReSharper uyarı seviyesi öneririm

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BenjiManTV

    BenjiManTV

    20 Mart 2011
  • Greater Than Gatsby Photoshop Actions & Lightroom Presets

    Greater Than

    11 ŞUBAT 2013
  • tinycammonitor

    tinycammonit

    14 Aralık 2010