Articles of covariância

Covariância e IList

Eu gostaria de uma coleção Covariant cujos itens podem ser recuperados por índice. IEnumerable é a única coleção .net que eu conheço que é Covariant, mas não tem esse suporte de índice. Especificamente, gostaria de fazer isso: List dogs = new List(); IEnumerable animals = dogs; IList animalList = dogs; // This line does not […]

Por que o conjunto imutável de Scala não é covariante em seu tipo?

EDIT : Re-escrito esta questão com base na resposta original A class scala.collection.immutable.Set não é covariante em seu parâmetro de tipo. Por que é isso? import scala.collection.immutable._ def foo(s: Set[CharSequence]): Unit = { println(s) } def bar(): Unit = { val s: Set[String] = Set(“Hello”, “World”); foo(s); //DOES NOT COMPILE, regardless of whether type is […]

Exemplo de covariância e contravariância do mundo real

Eu estou tendo um pouco de dificuldade em entender como eu usaria covariância e contravariância no mundo real. Até agora, os únicos exemplos que vi foram o mesmo exemplo de array antigo. object[] objectArray = new string[] { “string 1”, “string 2” }; Seria bom ver um exemplo que me permita usá-lo durante o meu […]

Como é aplicada a covariância genérica e a contra-variância no C # 4.0?

Não participei do PDC 2008, mas ouvi algumas notícias de que o C # 4.0 é anunciado para suportar a covariância e a contra-variância genéricas. Ou seja, List pode ser atribuído a List . Como poderia ser? No livro C # in Depth de Jon Skeet, é explicado por que os genéricos C # não […]

Diferença entre covariância e contra-variância

Estou tendo dificuldade em entender a diferença entre covariância e contravariância.

Por que as matrizes são covariantes, mas os genéricos são invariantes?

De Java eficaz por Joshua Bloch, As matrizes diferem do tipo genérico de duas maneiras importantes. Os primeiros arrays são covariantes. Os genéricos são invariantes. Covariant significa simplesmente que se X é um subtipo de Y, então X [] também será um sub-tipo de Y []. Matrizes são covariantes Como string é o subtipo de […]

O suporte ao C # retorna a covariância do tipo?

Eu estou trabalhando com o .NET framework e eu realmente quero ser capaz de fazer um tipo personalizado de página que todo o meu site usa. O problema surge quando estou tentando acessar a página de um controle. Eu quero ser capaz de retornar meu tipo específico de página em vez da página padrão. Há […]

Em C #, por que um object List não pode ser armazenado em uma variável List

Parece que um object de lista não pode ser armazenado em uma variável de lista em c # e não pode mesmo ser explicitamente convertido dessa maneira. List sl = new List(); List ol; ol = sl; resulta em Não é possível converter implicitamente o tipo System.Collections.Generic.List para System.Collections.Generic.List E depois… List sl = new […]

Por que a covariância e a contravariância não suportam o tipo de valor

IEnumerable é co-variante, mas não suporta o tipo de valor, apenas o tipo de referência. O código abaixo é compilado com sucesso: IEnumerable strList = new List(); IEnumerable objList = strList; Mas mudando de string para int receberá erro de compilation: IEnumerable intList = new List(); IEnumerable objList = intList; O motivo é explicado no […]

Problema de variância C #: Atribuindo Lista como List

Veja o exemplo a seguir (parcialmente retirado do Blog do MSDN ): class Animal { } class Giraffe : Animal { } static void Main(string[] args) { // Array assignment works, but… Animal[] animals = new Giraffe[10]; // implicit… List animalsList = new List(); // …and explicit casting fails List animalsList2 = (List) new List(); […]