2010-12-02 21 views
5

Projelerimin çoğunda olayları ve delegeleri kullandım, ancak hala bir projedeki olayları ve delegeleri kullanmanın ve bir delegenin ve bir etkinliğin arasındaki farkın nerede olduğu konusunda aklımda bazı şüphelerim var. Lütfen? Bir yöntem çağrısı kapsülleyebilen bir türdürEtkinlikler ve delegeler nerede kullanılır?

+0

güzel açıklama burada: http://blog.monstuff.com/archives/000040.html – SubniC

+0

Bir olay yalnızca bir temsilci özel biçimidir. arasında – VVS

+0

olası yinelenen [olaylar ve katılımcılar ve ilgili uygulamalar arasındaki fark] (http://stackoverflow.com/questions/563549/difference-between-events-and-delegates-and-its-respective-applications) –

cevap

8

A Delegate. Yöntemi bir nesne olarak ele almak ve etrafından geçirmek istediğinizde bir temsilci kullanmalısınız.

Event yalnızca bir temsilci, sınıfınızın dışındaki herhangi bir kodun işleyicilerini ekleyebildiği ancak temsilci çağıramayacağı bir özellik olarak gösterme yöntemidir. Temsilcinizi bir ortak özellik olarak ifşa ederseniz, sınıfınızın dışındaki kodlar yalnızca işleyicilerini ekleyemez, aynı zamanda delege de çağırır.

Buna ek olarak, Olaylar ayrıca, işleyicileri eklendiğinde, çıkarma işlemini daha iyi denetlemenize izin veren bir kamu mülkünün düzenleyicisi ve ayarlayıcısı gibi, ekleme yöntemlerini de eklemenize izin verir.

Başka sınıfların sınıfınızdaki bir etkinliğe abone olmasını ve gerçekleştiğinde bildirim almasını istediğinizde olayı kullanmalısınız.

public delegate void MyMessageHandlerType(string message); 

public class EventTest 
{ 
    public event MyMessageHandlerType MessageEvent 
    { 
     add { } // invoked when MessageEvent += SomeMethod 
     remove { } // invoked when MessageEvent -= SomeMethod 
    } 
} 
2

Her iki delege ve olay, bir geri arama mekanizması sağlar. Bir olay, bağlı işleyicileri herhangi bir sayıda olabilir bir delagate biraz daha az bağlı olan bir geri arama mekanizması sağlar ve bu kod genellikle işleyicileri numarası (eğer varsa) bağımsız olarak aynı şekilde çalışır. İyi bir örnek, bir pencerenin Resized olayı olabilir; pencere yeniden boyutlandırma, herhangi bir olay işleyicisinin bağlı olup olmadığını çalışacaktır; olay bir bildirim mekanizmasıdır.

Delege, birçok duyuda daha fazla bağlıdır. Tipik olarak bir temsilci üyesi ile tam olarak bir yöntem ilişkilendirebilirsiniz ve genellikle beklenir; Örneğin LINQ uzantısı yöntemlerini (örneğin, Where) alın: temsilci parametresi için tam olarak bir yöntem sağlamadığınız sürece çalışmazlar.

İlgili konular