Delegados Starter Pack

D

Imaginemos el siguiente escenario, uno de los 4 pilares de la programación orientada a Objeto es la encapsulación, la usamos porque nos permite tener un mayor control sobre el acceso a cada una de las propiedades a un objeto determinado. Sin embargo, la implementación de métodos utilizando este paradigma pueden afectar el comportamiento aplicación.

Un breve ejemplo de esto es, la lógica de un método en una clase, esta puede depender sobre cuáles métodos van a invocarlo, puede requerir desarrollar algún componente específico. Otra situación muy común es que cuando creamos una clase o funciones, no sabemos a ciencia cierta cuáles aplicaciones o componentes van a utilizarlo, además necesitamos evitar introducir dependencias en nuestro código.

Qué aprenderemos en este artículo?

  • Qué son los delegados?
  • Cuándo y por qué los usamos?
  • Cómo declarar un delegado?

 

1.

En resumidas cuentas, un delegado es una referencia a un método. Los delegados se encargan de invocar el método al cual están referenciando. Un delegado es un objeto que se referencia a un método, estos pueden asignarse a una referencia de la misma forma en podemos asignar un valor entero a una variable entera.

Los delegados son usados para pasar métodos como argumento a otro método. Los manejadores de eventos son métodos que son invocados a través de un delegado. Un ejemplo de la declaración de un delegado:


Nota

Cuando sobrecargamos un método, la firma del mismo no incluye el tipo de retorno. Sin embargo, en el contexto de delegados la firma SI debe contener el tipo. En otras palabras, el método debe tener «el mismo tipo» que el delegado.

En la Referencia de la infografía encontrarás más información al respecto.


Veamos de manera rápida sus propiedades en la siguiente infografía


Cuando asignes un método a un delegado, la firma del método no tiene que coincidir exactamente con el delegado. Esto se llama covarianza y contravarianza. La covarianza hace posible que un método tenga un tipo de retorno  que sea más derivado que el definido en el delegado. La contravarianza permite un método que tiene tipos de parámetros que son menos derivados que aquellos en el tipo de delegado.


Referencia:

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/covariance-contravariance/using-variance-in-delegates


2.

Es muy importante que sepamos cuando y porqué debemos usar los delegados, además de sus ventajas para que la agreguemos a nuestra caja de herramientas, las razones que podemos enumerar son las siguientes:

  • Se usa un patrón de diseño de eventos.
  • Es deseable encapsular un método estático.
  • Una clase puede necesitar más de una implementación del método.
Sus principales usos son:

1. Abstracción y encapsulación un método (invocación anónima) Este es el uso más importante de los delegados; nos ayuda a definir un puntero abstracto que puede apuntar a métodos y funciones. El mismo delegado abstracto se puede usar más adelante para señalar ese tipo de funciones y métodos.

2. Procesamiento asincrónico. Al usar ‘BeginInvoke’ y ‘EndInvoke’, podemos llamar a los delegados de forma asincrónica. En nuestra sección anterior, hemos explicado el mismo en detalle.

3. MultiCasting: procesamiento secuencial En algún momento nos gustaría llamar a algunos métodos de forma secuencial, lo que se puede hacer mediante el uso de un delegado de multiCasting.

 

3.

Para crear un delegado podemos checar la siguiente porción de código, que puede ser ejecutada y debuggeada como aplicación de consola. En este caso el delegado solo hace referencia a un método, pero podría darse el caso de que nuestro delegado haga referencia a varios métodos que contengan la misma firma.

En resumen, en este corto articulo pudimos aprender que es un delegado, una referencia a un método, ademas de las razones por las cuales sería necesario usar delegados, además de esto también sus propiedades más importantes y finalmente mediante código como declarar, instanciar y usar un delegado.

Hasta la próxima amigos.

 

Acerca del Autor

leslie.ramirez

Soy estudiante Ing. De tecnología de la Información y comunicación, tecnólogo superior en Desarrollo de Software. Me considero una persona innovadora y creativa, disfruto aprender cosas nuevas y desarrollar aplicaciones.

Entradas recientes

Categorías