Genérico Varianza en C# 4.0 ha sido implementado de tal manera que es posible escribir lo siguiente sin una excepción (que es lo que sucedería en C 3.0 #):Genérico Varianza en C# 4.0
List<int> intList = new List<int>();
List<object> objectList = intList;
[no funcional Ejemplo: Véase la respuesta de Jon Skeet]
poco asistí a una conferencia en la que Jon Skeet dio una excelente visión general de la varianza genérica, pero no estoy seguro de que estoy recibiendo por completo - entiendo el significado del in
y out
palabras clave cuando se trata de contra y co-varianza, pero tengo curiosidad por lo que sucede detrás de escena.
¿Qué ve el CLR cuando se ejecuta este código? ¿Está convirtiendo implícitamente el List<int>
en List<object>
o simplemente está integrado en que ahora podemos convertir tipos derivados a tipos principales?
Fuera de interés, ¿por qué no se introdujo esto en versiones anteriores y cuál es el beneficio principal, es decir, el uso en el mundo real?
Más información sobre este post de Varianza genérico (pero la pregunta es extremadamente anticuado, en busca de bienes, hasta a la fecha de la información)
Ah, señaló. Tendré que descargar y echar un vistazo a los ejemplos del último sábado y jugar con él. El concepto en sí mismo tiene sentido, seguro, solo estoy tratando de entender la ideología del uso del concepto en situaciones del mundo real. Muchas gracias por la respuesta. –
@Daniel: No hay problema - disculpe que claramente no lo expliqué lo suficientemente bien el sábado :) (Había mucho que cubrir, sin duda ...) –
Oh, no es para nada Jon - todo se movía un poco rápido y no he estado expuesto, bueno, a ninguna de las nuevas características de C# 4 - Estaba garabateando notas como un loco. Parece que tendré que pedir la segunda edición de C# en profundidad :) –