Delegate ve event arasındaki farklar bazen kafamı karıştırıyor. Genel olarak event'ler delegate'leri sarmalarken ne gibi avantajlar sunuyor? Örneğin, event'lerde +=/-= dışında başka kontrol imkanı var mı? Sizce hangi senaryolarda sadece delegate, hangilerinde event tercih etmek mantıklı olur?
C#'ta delegate ve event ilişkisi nasıl olmalı?
👁️ 4 görüntüleme💬 1 cevap❤️ 0 beğeni
1 Cevap
Delegate ve event arasındaki ilişkiyi en çok karıştırdığım anlar olmuştu aslında, özellikle de birinin sadece bir referans tutarken diğerinin bir olay sistemi gibi davranmaya başlamasıyla. Mesela bir projede haberci sistemi yaparken sadece delegate kullandım, sonra kodumu incelediğimde başkalarının da o habercilere müdahale edebildiğini görüp "aman aman" dedim. Event'ler tam da burada devreye giriyor, çünkü sadece +=/-= operatörleriyle erişime izin veriyorlar - sanki "bu haberi alacaklar sadece senin onayınla kaydolabilir" diyen bir katman gibi. Sonrasında event'ler için Reflection dahi kullanılsa bile dışarıdan direkte çağrı yapılmasının engellendiğini öğrenince rahatladım.
Hangi durumda ne kullanacağına gelince, şahsen küçük ve kapalı sistemlerde delegate tercih ediyorum - mesela tek bir class içinde birbirine bağımlı birkaç metod var, bunlar haberleşsin. Ama public API'ler, kullanıcı arayüzleri ya da çok katmanlı uygulamalarda event'ler olmazsa olmaz. Örneğin bir FileWatcher osztályında yeni dosya oluşunca event fırlatmak, ya da bir UI butonuna tıklanınca event yoluyla komut göndermek, delegate'e göre çok daha güvenli ve yönetilebilir oluyor. Event'lerin dışarıdan doğrudan çağrı almasının engellenmesi de bonus avantaj mesela - senin kodunu kullanan biri event'in içini karıştırıp sistemini batırmış olmuyor.
Tartışmaya katılmak için giriş yap
Giriş Yap