Recomendado, 2024

La Elección Del Editor

Diferencia entre delegados y eventos en C #

El uso de delegados y eventos juega un papel importante en el programa dirigido por eventos. Los delegados pueden referirse a un método, y es bastante similar al puntero de función en C ++. Los eventos notifican que se ha realizado alguna acción. La diferencia básica entre delegados y eventos es que los delegados mantienen la referencia de los métodos y el evento proporciona una forma de acceder a ese método utilizando delegados.

Gráfica comparativa

Bases para la comparaciónDelegadosEventos
BASICUn delegado tiene la referencia de un método.El evento es una abstracción superpuesta proporcionada a los delegados.
Sintaxisdelegate return_type delegate_name (lista_parámetros);event event_delegate event_name;
Palabra claveUn delegado se declara utilizando una palabra clave "delegado".Un evento se declara usando una palabra clave "evento".
DeclaraciónUn delegado se declara fuera de cualquier clase.Un evento es declarado dentro de una clase.
InvocarPara invocar un método hay que remitirlo al delegado.Para invocar un método hay que asignarlo al evento.
Covarianza y ContravarianzaProporcionan flexibilidad a los delegados.No hay tal concepto.
Acontecimiento al eventoNo hay tal concepto.Gestiona la lista de los manejadores de eventos.
DependenciaLos delegados son independientes de los eventos.El evento no se puede crear sin delegados.

Definición de delegados

En C #, los delegados se utilizan como punteros de función para referirse a un método. Es específicamente un objeto que se refiere a un método que se le asigna. El mismo delegado se puede utilizar para referir diferentes métodos, ya que es capaz de mantener la referencia de diferentes métodos, pero de uno en uno. El método que invocará el delegado se determina en el tiempo de ejecución. La sintaxis de declarar un delegado es la siguiente:

 delegate return_type delegate_name (lista_parámetros); 

Aquí, return_type declara el tipo de valor devuelto por el método, que es llamado por delegate y delegate_name es el nombre del delegado. La lista de parámetros define la lista de parámetros requeridos por los métodos que llamará el delegado.

Hay algunos puntos importantes para recordar acerca de los delegados. Puede llamar a cualquier método que coincida con su firma y el tipo de retorno. Un delegado puede llamar tanto a un método de instancia como a un método estático. Si llama a un método de instancia, tiene que tomar la ayuda de un objeto para invocar el método. Los delegados admiten la multidifusión, es decir, puede encadenar los métodos a los que se llamará automáticamente cuando se invoque al delegado que los refiera. Simplemente tiene que crear un objeto delegado y asignar los métodos uno tras otro a la cadena utilizando el operador "+ =". También puede desencadenar un método usando el operador "- =".

Las características que agregan flexibilidad adicional al delegado son Covarianza y Contravarianza. La covarianza y la contraparte permiten la condición en la que el tipo de retorno y la firma del método asignado para delegar son diferentes de los del delegado.

  • La covarianza le permite asignar un método al delegado donde el tipo de retorno del método es una clase que se deriva de la clase que especifica el tipo de retorno del delegado.
  • La contraparte le permite asignar un método al delegado donde el tipo de parámetro del método es una clase base de la clase que se especifica como el parámetro del delegado.

Definición de Eventos

Los eventos son la acción realizada que cambia el estado de un objeto. Los eventos se declaran utilizando delegados, sin la presencia de delegados no se pueden declarar eventos. Se puede decir que un evento proporciona encapsulación a los delegados. Hay dos compuestos importantes cuando se trata de eventos que son eventos y manejadores de eventos. Si los objetos están interesados ​​en el evento, entonces registra un controlador de eventos para ese evento en particular. Y cada vez que se activan los eventos, se llaman los controladores de eventos registrados. La declaración del evento es la siguiente:

 event event_delegate event_name; 

Aquí, "evento" es una palabra clave que muestra la declaración de un evento. A continuación, event_delegate muestra el nombre del delegado que apoya el evento. Entonces, event_name es el nombre del evento

Hay algunos puntos importantes para recordar al tratar con los eventos. Al igual que los delegados, los eventos también pueden ser multidifusión, es decir, los objetos múltiples que están encadenados (registrados) a un controlador de eventos, responden cuando se produce un evento. Los controladores de eventos se pueden agregar a la cadena utilizando el operador "+ =" y se pueden desencadenar utilizando el operador "- =" Tanto el método estático como el de instancia se pueden usar como un controlador de eventos. El controlador de eventos puede darle el control de la implementación de la lista de manejadores de eventos.

La interfaz puede contener eventos. Los eventos también pueden ser abstractos, mientras que los eventos basados ​​en accesores no pueden ser abstractos. El evento puede ser virtual y puede ser anulado por la clase derivada.

Diferencias clave entre delegados y eventos en C #

  1. Delegado es un objeto utilizado como puntero de función para mantener la referencia de un método. Por otro lado, los eventos proporcionan una abstracción a los delegados.
  2. Una palabra clave requerida para declarar un delegado es un delegado, mientras que una palabra clave requerida para declarar un evento es un evento .
  3. Un delegado se declara fuera de una clase, mientras que un evento se declara dentro de una clase.
  4. Para invocar un método utilizando un objeto delegado, el método debe ser referido al objeto delegado. Por otro lado, para invocar un método utilizando un objeto de evento, el método debe ser referido al objeto de evento.
  5. Covariance y Contravariance proporcionan flexibilidad adicional a los objetos delegados. Por otro lado, el evento no tiene tales conceptos.
  6. Event Accessor maneja la lista de controladores de eventos, mientras que el delegado no tiene tal concepto.
  7. Los delegados son independientes de los eventos, pero no se pueden crear eventos sin delegado.

Conclusión:

Los delegados son útiles porque apoyan eventos, y proporcionan la facilidad de ejecutar el método en tiempo de ejecución. El elemento de acceso a eventos nos permite sincronizar los controladores de eventos en aplicaciones de subprocesos múltiples.

Top