Raccomandato, 2023

Scelta Del Redattore

Differenza tra delegati ed eventi in C #

l'uso di delegati e eventi svolgono entrambi un ruolo importante nel programma guidato dagli eventi. I delegati possono fare riferimento a un metodo ed è abbastanza simile al puntatore di funzione in C ++. Gli eventi notificano che è stata eseguita un'azione. La differenza fondamentale tra i delegati e gli eventi è che i delegati mantengono il riferimento dei metodi e l'evento fornisce un modo per accedere a quel metodo usando i delegati.

Grafico comparativo

Base per il confrontoI delegatieventi
Di baseUn delegato detiene il riferimento di un metodo.L'evento è un'astrazione stratificata fornita ai delegati.
Sintassidelegate return_type delegate_name (parameter_list);evento event_delegate event_name;
Parola chiaveUn delegato viene dichiarato utilizzando una parola chiave "delegato".Un evento è dichiarato utilizzando una parola chiave "evento".
DichiarazioneUn delegato è dichiarato al di fuori di ogni classe.Un evento è dichiarato all'interno di una classe.
InvocarePer richiamare un metodo, è necessario fare riferimento al delegato.Per richiamare un metodo deve essere assegnato all'evento.
Covarianza e controvarianzaOffrono flessibilità ai delegati.Nessun concetto del genere.
Accessor eventoNessun concetto del genere.Gestisce l'elenco dei gestori di eventi.
DipendenzaI delegati sono indipendenti dagli eventi.L'evento non può essere creato senza delegati.

Definizione di delegati

In C # i delegati sono usati come puntatore a funzione per riferire un metodo. È specificamente un oggetto che fa riferimento a un metodo che gli viene assegnato. Lo stesso delegato può essere utilizzato per riferirsi a metodi diversi, in quanto è in grado di mantenere il riferimento di metodi diversi ma, uno alla volta. Quale metodo verrà invocato dal delegato viene determinato al runtime. La sintassi di dichiarazione di un delegato è la seguente:

 delegate return_type delegate_name (parameter_list); 

Qui, return_type dichiara il tipo di valore restituito dal metodo, chiamato da delegato e delegate_name è il nome del delegato. L'elenco parametri definisce l'elenco di parametri richiesti dai metodi che verranno chiamati dal delegato.

Ci sono alcuni punti importanti da ricordare sui delegati. Può chiamare qualsiasi metodo che corrisponda alla sua firma e al tipo di ritorno. Un delegato può chiamare sia un metodo di istanza che un metodo statico. Se chiama un metodo di istanza deve prendere l'aiuto dell'oggetto per richiamare il metodo. I delegati supportano il multicasting, ovvero puoi raggruppare i metodi che verranno chiamati automaticamente quando viene richiamato il delegato che fa riferimento ad essi. Devi semplicemente creare un oggetto delegato e assegnare i metodi uno dopo l'altro alla catena usando l'operatore "+ =". Puoi anche annullare un metodo usando l'operatore "- =".

Le caratteristiche che aggiungono maggiore flessibilità al delegato sono la covarianza e la controvarianza. Covarianza e controvarianza consentono la condizione in cui il tipo di reso e la firma del metodo assegnato al delegato sono diversi da quelli del delegato.

  • Covariance consente di assegnare un metodo al delegato in cui il tipo restituito del metodo è una classe derivata dalla classe che specifica il tipo restituito del delegato.
  • La controvarianza consente di assegnare un metodo al delegato in cui il tipo di parametro del metodo è una classe base della classe specificata come parametro del delegato.

Definizione di eventi

Gli eventi sono l'azione eseguita che cambia lo stato di un oggetto. Gli eventi vengono dichiarati utilizzando i delegati, senza la presenza di delegati non è possibile dichiarare eventi. Puoi dire che un evento fornisce incapsulamento ai delegati. Ci sono due importanti composti quando si tratta di eventi che sono eventi e gestori di eventi. Se gli oggetti sono interessati all'evento, quindi registra un gestore di eventi per quel particolare evento. E ogni volta che gli eventi vengono licenziati vengono chiamati i gestori di eventi registrati. La dichiarazione dell'evento è la seguente:

 evento event_delegate event_name; 

Qui, "evento" è una parola chiave che mostra la dichiarazione di un evento. Quindi, event_delegate mostra il nome del delegato che supporta l'evento. Quindi, event_name è il nome dell'evento

Ci sono alcuni punti importanti da ricordare mentre si affrontano gli eventi. Come i delegati, anche gli eventi possono essere multicast cioè più oggetti che sono concatenati (registrati) a un gestore di eventi, rispondono quando un evento viene generato. I gestori di eventi possono essere aggiunti alla catena usando l'operatore "+ =" e possono essere sganciati usando l'operatore "- =" Sia il metodo statico che il metodo di istanza possono essere usati come gestore di eventi. L'accessor di eventi può darti il ​​controllo dell'implementazione dell'elenco di gestori di eventi.

L'interfaccia può contenere eventi. Gli eventi possono anche essere astratti mentre l'evento basato sugli accessor non può essere astratto. L'evento può essere virtuale ed essere sovrascritto dalla classe derivata.

Differenze chiave tra delegati ed eventi in C #

  1. Delegare è un oggetto utilizzato come puntatore a funzione per contenere il riferimento di un metodo. D'altra parte, gli eventi forniscono un'astrazione ai delegati.
  2. Una parola chiave richiesta per dichiarare un delegato è un delegato mentre, una parola chiave richiesta per dichiarare un evento è un evento .
  3. Un delegato viene dichiarato al di fuori di una classe mentre, un evento viene dichiarato all'interno di una classe.
  4. Per richiamare un metodo utilizzando un oggetto delegato, il metodo deve essere riferito all'oggetto delegato. D'altra parte, per invocare un metodo usando un oggetto evento, il metodo deve essere riferito all'oggetto evento.
  5. Covarianza e controvarianza offrono maggiore flessibilità agli oggetti delegati. D'altra parte, l'evento non ha tali concetti.
  6. Event Accessor gestisce l'elenco dei gestori di eventi mentre il delegato non ha questo concetto.
  7. I delegati sono indipendenti sugli eventi ma, non è possibile creare eventi senza delegati.

Conclusione:

I delegati sono utili in quanto supportano gli eventi e forniscono la possibilità di eseguire il metodo in fase di runtime. L'accessor di eventi ci consente di sincronizzare i gestori di eventi nelle applicazioni di multithreading.

Top