En matrices de tipo de referencia .NET son covariantes. Esto se considera un error. Sin embargo, no veo por qué esto es tan malo en cuenta lo siguiente código:¿Por qué la co-varianza de array se considera tan horrible?
string[] strings = new []{"Hey there"};
object[] objects = strings;
objects[0] = new object();
Oh no, esto se compila y se producirá un error en tiempo de ejecución. Como tratamos de meter un objeto en una cadena []. Está bien, acepto que huele mal, pero una T [] se extiende de la matriz y también implementa IList
(y IList<T>
, me pregunto si se implementa IList<BaseType>
...>. Tanto la matriz y IList nos permiten hacer el mismo error horrible.
string[] strings = new []{"Hey there"};
Array objects = strings;
objects.SetValue(new object(),new[]{0});
versión IList
string[] strings = new []{"Hey there"};
IList objects = strings;
objects[0] = new object();
el T clases son generadas por el CLR, y tienen que incluir una verificación de tipos en el equivalente del método set_Item
[] (matrices no tienen realmente uno).
es el ¿Le preocupa que el ajuste a T [] tenga que hacer la comprobación de tipo en el tiempo de ejecución (que viola la seguridad de tipo que espera al momento de la compilación)? ¿Por qué se considera dañino que las matrices exhiban esta propiedad cuando existen medios equivalentes para dispararse en el pie a través de los medios indicados anteriormente?
Quizás quiso decir objects [0] = new object(); ? –
sí, buena captura! –