I am pretty determined to keep things as standard as possible
Buona. Non lo stai facendo però. Le linee guida standard possono essere trovate qui:
MSDN - Design di eventi per .NET Framework
Hai violato le linee guida
use System.EventHandler<TEventArgs>
instead of manually creating new delegates to be used as event handlers.
Naturalmente le linee guida sono linee guida , non regole . Le linee guida continuano a notare che se per qualche motivo decidi di violare questa linea guida ...
use object as the type of the first parameter of the event handler, and call it sender.
La tua domanda è:
Is there any reason I shouldn't just use delegate void ClientEvent(TCPClient client, ClientEventArgs e)
as my event?
Cioè, se è il caso che il mittente sarà sempre un TCPClient
, perché non codificarlo nel sistema di tipi?
Bene, questo viola le linee guida del design, ma ovviamente è mere domande. Perché questa linea guida? Il ragionamento è dovuto al fatto che la tua affermazione che il mittente di questo evento sarà sempre e per sempre TCPClient
è uno che storicamente si è spesso rivelato essere violato. Tu pensi che sì, voglio solo gestire gli eventi click sui pulsanti, quindi il mittente può essere Button
, e poi sprint di qualche designer UX vuole cambiare completamente metà dei pulsanti in scimmie cliccabili, e ora l'evento click deve essere applicato a entrambi i pulsanti e le scimmie, e blah blah blah, vedi come va.
Ancora una volta: le linee guida sono linee guida, non regole. Se si ha fiducia che codificare questa limitazione nel sistema di tipi è più alto del rischio di avere qualche designer dire "hey, puoi cambiare metà dei client in TCPMonkey, quanto può essere difficile?" quindi con tutti i mezzi per farlo.