C # 'daki olayları programlarken, şu şekilde bir temsilci oluşturmanız tavsiye edilir :
delegate XEventHandler(object sender, XEventArgs e);
Sorum delegenin ilk argümanında object sender
. Her zaman jenerik olmak zorunda object
mı? Bir gönderene sahip olmak object
her zaman buna benzer bir kodla sonuçlanır.
val = ((ConcreteType)sender).Property;
veya daha ayrıntılı,
ConcreteType obj = sender as ConcreteType
if (obj != null) { ... }
Güçlü yazılan gönderenlere karşı yapılan bir argüman, diğer nesnelerin olay hakkında endişelenmeden olayı iletebilmesidir . Bu GUI ortamlarında mantıklı gelse de, GUI dışında fayda sağlayabileceğinden emin değilim.
Gönderenin sınıfı her zaman biliniyorsa (en azından soyut bir sınıf olarak)? Örneğin, ListChanged
soyut bir List
sınıfta bir olay uyguluyorsam ve diğer sınıflar bunu devralacaksa (örn LinkedList
. ArrayList
), Temsilci türünü bir gönderenle tanımlamak doğru List
mudur?
delegate ListChangedEventHander(List sender, ListChangedEventArgs e);
Yoksa konvansiyonel olanı object sender
daha spesifik bir türe dönüştürmenin bir dezavantajı olur mu?