.NET olay modeli hakkındaki anlayışımdan oldukça memnunum. Sanırım sistemin küçük bir nüansını yanlış anlıyor olabilirim.
Olayları sınıflarıma koymaya başladığımda standart yolu şöyle kullanırdım:
public event EventHandler<MyEventArgs> MyEvent;
Bu, etkinliğe abone olan her şeyin aşağıdaki gibi bir yönteme ihtiyacı olacağı anlamına geliyordu:
void HandleThatEvent(object sender, MyEventArgs args){...}
Hangi güzel, ama nadiren gönderen umurumda olduğunu buldum, bu yüzden şişirilmiş yöntem imzaların bir sürü yaptı.
Bu yüzden kendi delege türlerimi beyan etmeye geçtim
public delegate void MyEventHandler(SomeClass argument);
Bu, dağınıklığı azalttı, ancak işleyicileri yazmaya geldiğinde bana küçük bir sorun bıraktı:
eventImplmentor.MyEvent += HandleThatEvent;
.
.
.
void HandleThatEvent(/*oh, um, what arguments does it take? Intellisense isn't telling me*/)
Bu yüzden temsilci beyanına geri dönüp bakıp sonra geri dönüp bunları yazmam ya da derlemem ve söylenmeyi beklemem gerekecekti.
Yani şimdi bunun yerine, sadece kullanıyorum Action, Action<T>ya da her türlü şablon uyuyor.
public event Action<SomeClass> MyEvent;
Böylece olayın üzerine gelebilir ve hangi parametreleri beklediğini söyleyebilirim.
Benim sorum, tüm bunlardan sonra: C # olayları bildirmek için en iyi uygulama var mı? Geri dönmeli miyim EventHandler<T>, yoksa Action<T>kabul edilebilir mi?