Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 20054|Respuesta: 0

[Fuente] Entender rápidamente los conceptos avanzados de C# (1) Delegación de delegados

[Copiar enlace]
Publicado en 19/1/2017 15:18:00 | | | |
Llevo mucho tiempo desarrollando en .NET y recientemente reseñé el libro "C# Advanced Programming". Descubrí que muchos problemas que antes parecía entender pero no entendía pueden estudiarse y comprender poco a poco.

Así que planeo empezar a escribir una entrada en el blog sobre la "Serie de Programación Avanzada en C#". Se basará en el concepto del libro "C# Advanced Programming" y también hará referencia a las entradas de blog de otros expertos, espero que lo entiendas. Si hay algún problema, por favor corrígelo.

(Además: Esta entrada del blog no explicará los conceptos básicos de definiciones y gramática.) )



Hablemos de la puesta en marcha.

Delegate se usa ampliamente en .NET. Habrá expresiones lambda, eventos, métodos de anonimato, etc. involucrados (permanece atento para próximas entradas del blog).

¿Entonces, qué es la confianza?

En términos sencillos, los delegados no son diferentes de especificar métodos, salvo que deben especificar la palabra clave delegado y no tienen entidad de método. Puedes pensarlo como un marcador de posición, por ejemplo, cuando escribes código sin saber con qué vas a lidiar. Solo necesitas saber qué tipo de parámetro y de salida vas a introducir y definirlo. Este es el método que transmite el libro de que la firma debe significar lo mismo.

Definamos una delegación básica:





Resultados de ejecución:
¿Ves el lugar práctico mencionado arriba para confiar? ConcretamenteUn delegado puede ejecutar cualquier método con el mismo tipo de parámetro de ingestión y tipo de retorno, o incluso una cola de métodos con la misma firma.

¿Entonces nuestras firmas de método (es decir, parámetros de importación y salida) realmente tienen que ser exactamente iguales a las del delegado? Respuesta: No, no podemos ignorar la covarianza y la variación inversa.
Vamos a introducir brevemente el conocimiento sobre covariante e inversor.

"Covarianza" significa poder usar un tipo que sea más derivado que el tipo derivado especificado originalmente.
"Inversor" se refiere a la capacidad de usar un tipo con menor grado de derivación.
Entonces, nuestra comisión también está sujeta a covarianza e inversa.

Esto significa que si se define un delegado, no solo el mismo método de firma puede asignar valor a la variable delegada.
Si la tabla de parámetros de un método coincide con la declaración de delegado, pero devuelve una clase derivada de (la declaración de delegado devuelve el tipo), entonces el método también puede asignarse a esta variable de delegado.
Si el tipo de retorno de un método coincide con la declaración del delegado, pero el argumento es la clase antecesora del tipo de parámetro de declaración del delegado, entonces el método también puede asignarse a la variable delegada.
Si los parámetros y el tipo de retorno de un método coinciden con las suposiciones de las dos líneas anteriores, entonces el método también puede asignarse a la variable delegada.

A continuación se muestra un ejemplo sencillo de covariante frente a inversor:

Covarianza:

Inversor:







Anterior:Diseño MFC
Próximo:Cómo averiguar en qué PID de proceso está ocupado un archivo
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com