2009-06-21 15 views
11

C'è già una risposta alla domanda che è In C#, isn't the observer pattern already implemented using Events?Schema di osservatore implementato in C# con i delegati?

Si chiede se il modello di osservatore è già implementato in C# utilizzando eventi.

Mentre ricevo il modello di eventi e osservatori, il modello di osservatore non è in realtà solo delegati ed eventi è un'ulteriore implementazione?

+0

Potresti approfondire la tua domanda? Sembra che tu sia a conoscenza dell'altra domanda e della sua risposta, quindi sembra che tu stia chiedendo qualcosa in più, ma non è chiaro per me cosa sia. –

risposta

28

Sei corretto. Un evento è semplicemente un delegato con alcune funzionalità leggermente diverse. Tutto il modello di osservatore può essere implementato con i delegati senza mai toccare la parola chiave event.

Potresti essere interessato a ciò che la parola chiave "evento" porta effettivamente in tavola.

  • Gli eventi possono essere parte di un'interfaccia, mentre regolare campo delegato non può
  • eventi non possono essere invocati da classi esterne, ma delegati regolari può
  • Eventi le funzioni di accesso aggiuntivi (aggiungere e rimuovere) che si può eseguire l'override e fornire funzionalità personalizzate per

Modifica: Here's a great writeup con confronto codice IL tra eventi e delegati. (Suggerimento: è praticamente lo stesso).

+0

@womp grazie per l'intuitivo articolo – TheVillageIdiot

+0

@womp, per quanto riguarda il tuo primo punto elenco, è "Azione " non un delegato che può far parte di un'interfaccia? –

+0

@womp, per quanto riguarda il primo punto elenco, è "Azione " non un delegato che può far parte di un'interfaccia? 'interfaccia pubblica ITest { void SupplyCallbackMethod (callback azione ); } ' –