2011-12-12 10 views
6

Bir etkinliği ayırmak için neden aşağıdakileri kullanmalıyım? yeni operatör çalıştığını nasıl tedirginNeden "new" operatörü - =? Kullanarak bir eventhandler'ı ayırmak için çalışıyor?

object.myEvent -= new MyEvent(EventHandler); 

Biraz duyuyorum.

Birisi açıklayabilir mi?

Güncelleme

Zaten ben olayları ayrılması için yeni operatörünü kullanmak zorunda olmadığını biliyoruz, ama yine de Visual Studio otomatik tamamlama öneri 2010. Benim asıl soru nasıl yapar - = Ayrıştırma işlemi için yeni çalışma. Yeni bir nesne/temsilci, önceden oluşturulmuş bir nesne/temsilci ile + = tarafında nasıl eşleşir?

cevap

12

new işlecini kullanmanız gerekmez. Sen C# 2.0 çıktığından beri hiç olmadı:

foo.SomeEvent += EventHandler; 
foo.SomeEvent -= EventHandler; 

Bu yöntem grubunun (yöntemin adı) bir temsilci oluşturmak için bir yöntem grup dönüşümü kullanır. Bu, sadece olaylar için değil ya:

Action<string> writeToConsole = Console.WriteLine; 

DÜZENLEME: nasıl için çalıştığını gibi: Bir olay üzerine -= kullanma

  • sadece tipik "kaldır" erişimci, çağıran biter bir temsilci üzerinde -= kullanır ... (en azından etkili bir şekilde) bir temsilci üzerinde -= kullanma
  • Delegate.Remove
  • için sözdizimsel şeker Aynı yöntem ve (örneğin yöntemleri için) aynı hedef örneği için bir yöntem grubu dönüşümü kullanılarak hala temsilci her yeni bir örneğini yaratacak

Not varsa, iki temsilci örnekleri eşittir -eşitliği temsilci kullanır Kodu geçersin.

+0

Tamam, "Yani şimdi rahatsız olduğum için bir + = ve sonra - = ne kullanmalıyım?" ;-) –

+0

Cevabınız için teşekkür ederim, ama bana daha fazla bilgi verebilir misiniz? Yeni kullanmam gerekmediğini biliyorum. Ama yine de Visual Studio 2010'da otomatik olarak tamamlandı. (Foo.SomeEvent + = Visual Studio yazmayı önerirseniz + = yeni ... önermek isterim. Net iç kısımların nasıl ayrıldığını bilmek istiyorum. Önceden oluşturulmuş bir nesne/temsilci – Grrbrr404

+0

@ Grrbrr404: Uygun şekilde düzenlenmiştir Sorunuzu geri almayı düşünebilirsiniz - yeni operatörü bir olayın kopması için kullanmanız gerekmediğini biliyorsanız, "Neden bende var Bir olay işleyicisini - =? "kullanarak ayırmak için yeni bir yöntem kullanmak oldukça garip görünüyor. –

İlgili konular