Saya cukup senang dengan pemahaman saya tentang model acara .NET. Saya pikir saya mungkin salah paham sedikit nuansa sistem.
Ketika saya mulai memasukkan acara ke dalam kelas saya, saya akan menggunakan cara standar seperti:
public event EventHandler<MyEventArgs> MyEvent;
Ini berarti bahwa apa pun yang berlangganan acara tersebut memerlukan metode seperti:
void HandleThatEvent(object sender, MyEventArgs args){...}
Itu bagus, tetapi saya menemukan bahwa saya jarang peduli dengan pengirimnya, jadi itu membuat banyak tanda tangan metode membengkak.
Jadi saya beralih untuk menyatakan tipe delegasi saya sendiri
public delegate void MyEventHandler(SomeClass argument);
Yang mengurangi kekacauan, tetapi meninggalkan saya dengan masalah kecil ketika menulis handler:
eventImplmentor.MyEvent += HandleThatEvent;
.
.
.
void HandleThatEvent(/*oh, um, what arguments does it take? Intellisense isn't telling me*/)
Jadi saya harus kembali ke deklarasi delegasi dan mencari dan kemudian kembali dan menuliskannya, atau menyusunnya dan menunggu untuk diberi tahu.
Jadi sekarang, sebagai gantinya, saya hanya menggunakan Action
, Action<T>
atau template apa pun yang cocok.
public event Action<SomeClass> MyEvent;
Sehingga saya bisa mengarahkan kursor ke acara tersebut dan diberi tahu parameter apa yang diharapkannya.
Pertanyaan saya, setelah semua itu: Apakah ada praktik terbaik untuk mendeklarasikan peristiwa dalam C #? Haruskah saya kembali ke EventHandler<T>
jalan, atau Action<T>
dapat diterima?