Includeva una parola chiave per gli eventi un errore in C #?

1

C # ha eventi integrati con una parola chiave. Quindi se vuoi dichiarare un evento, scrivi:

public event MyEventHandler SomethingHappened;

È comodo, in quanto consente di aggiungere più gestori di eventi, sebbene impedisca anche di personalizzare il modo in cui vengono gestiti gli eventi, ad esempio se si desidera garantire che determinati gestori di eventi vengano sempre eseguiti in un determinato ordine.

Sembra che il codice sarebbe più flessibile se fosse scritto invece come:

public Event<MyEventHandler> SomethingHappened = default;

Quindi potresti anche sostituire eventi personalizzati. Non vedo inoltre alcun motivo per cui l'operazione += non possa ancora essere utilizzata per aggiungere nuovi gestori. Quindi questo riduce semplicemente la flessibilità o la parola chiave offre qualcos'altro?

    
posta Casebash 03.03.2018 - 02:43
fonte

2 risposte

8

Il punto di un event è che non consente agli estranei di ottenere o sovrascrivere tutti i gestori di eventi. Un evento essenzialmente un tipo specializzato di proprietà, che ha add / remove invece di get / set .

La versione che mostri è l'analogo di una proprietà automatica. Se non sei soddisfatto dell'implementazione predefinita di add / remove , scrivi la tua.

public event EventHandler MyEvent {
   add { ... } 
   remove { ... }
}

Gli eventi non hanno nulla a che fare con la possibilità di aggiungere più gestori, è già possibile farlo utilizzando i delegati multicast.

    
risposta data 03.03.2018 - 02:54
fonte
4

Il valore principale di un evento che è un cittadino di prima classe nel mondo .NET (che io possa pensare) è che è riconoscibile attraverso la riflessione attraverso le implementazioni linguistiche. Ciò consente a uno sviluppatore di creare un componente completo (possibilmente chiuso) e un altro sviluppatore lo usa.

Gli eventi sono principalmente una funzione componente che consente l'interazione tra parti di software con dipendenze minime. Questo è anche il motivo del prototipo del gestore standard: (oggetto mittente, EventArgs e).

Se questo ti sembra troppo restrittivo e non ti interessa il client sconosciuto o questo scenario non si applica alla tua situazione, puoi comunque creare il tuo meccanismo. Ma qualsiasi sviluppatore che deve mantenere i tuoi contenuti dopo ti odierà per questo.

    
risposta data 03.03.2018 - 09:51
fonte

Leggi altre domande sui tag