ExpertiDict

C# · Avançado · Português · Técnico

covariância de arrays

/kovaɾiˈɐ̃sjɐ dʒi aˈxajs/substantivo

Em C#, arrays de um tipo de referência derivado podem ser atribuídos a arrays do tipo base (string[] para object[]). A checagem só ocorre ao gravar, em runtime.

Onde usar

Aparece como pegadinha em entrevistas e em bugs de ArrayTypeMismatchException. A covariância é insegura nos arrays por razões históricas; coleções genéricas como List<T> são invariantes, e IEnumerable<T> é covariante com segurança.

Em código

string[] textos = { "a", "b" };
object[] objs = textos;     // compila
try { objs[0] = 42; }       // grava int
catch (ArrayTypeMismatchException)
{ Console.WriteLine("falhou em runtime"); }

Exemplos

A covariância de arrays deixa atribuir string[] a object[], mas pode estourar ao gravar.

Prefira List<T>, que é invariante, para evitar essa pegadinha.

Cuidado

Não confunda com a covariância de interfaces genéricas, que é verificada em compilação e não permite escrita.

Antônimos

invariância

Veja também

Todos os termos de C#