Qual é a diferença entre <out T>e <T>? Por exemplo: public interface IExample<out T> { ... } vs. public interface IExample<T> {
Covariância, contravariância e invariância descrevem como a hierarquia de herança de tipo existente muda quando sujeita a alguma transformação (como o uso em genéricos). Se a transformação mantém a ordem da hierarquia original, ela é "covariante". Se o inverter, é "contravariante". Se quebrar, é "invariante".
Qual é a diferença entre <out T>e <T>? Por exemplo: public interface IExample<out T> { ... } vs. public interface IExample<T> {
Embora possamos herdar da classe / interface base, por que não podemos declarar o List<> uso da mesma classe / interface? interface A { } class B : A { } class C : B { } class Test { static void Main(string[] args) { A a = new C(); // OK List<A> listOfA = new List<C>();...
Estou com um pouco de dificuldade para entender como usaria covariância e contravariância no mundo real. Até agora, os únicos exemplos que vi foram o mesmo exemplo antigo de matriz. object[] objectArray = new string[] { "string 1", "string 2" }; Seria bom ver um exemplo que me permitisse usá-lo...
Do Effective Java de Joshua Bloch, Matrizes diferem do tipo genérico de duas maneiras importantes. As primeiras matrizes são covariantes. Os genéricos são invariantes. Covariante significa simplesmente se X é subtipo de Y, então X [] também será subtipo de Y []. Matrizes são covariantes Como...
IEnumerable<T>é co-variante, mas não suporta o tipo de valor, apenas o tipo de referência. O código simples abaixo é compilado com sucesso: IEnumerable<string> strList = new List<string>(); IEnumerable<object> objList = strList; Mas mudar de stringpara intreceberá um erro...
Para obter mais informações sobre o Stack Overflow no Stack Overflow : Clique aqui para obter mais informações sobre o Stack Overflow. Estou tendo problemas para entender a diferença entre covariância e contravariância.
Após essa pergunta , alguém pode explicar o seguinte em Scala: class Slot[+T] (var some: T) { // DOES NOT COMPILE // "COVARIANT parameter in CONTRAVARIANT position" } Eu entendo a distinção entre +Te Tna declaração de tipo (ele compila se eu usar T). Mas então como alguém realmente escreve...
Eu tenho uma private readonlylista de LinkLabels ( IList<LinkLabel>). Mais tarde, adiciono LinkLabels a esta lista e adiciono esses rótulos da FlowLayoutPanelseguinte maneira: foreach(var s in strings) { _list.Add(new
Não consigo entender por que o seguinte código C # não compila. Como você pode ver, tenho um método genérico estático Something com um IEnumerable<T>parâmetro (e Testá restrito a ser uma IAinterface) e esse parâmetro não pode ser convertido implicitamente para IEnumerable<IA>. Qual é...
Hoje, eu li alguns artigos sobre Covariância, Contravariância (e Invariância) em Java. Eu li o artigo da Wikipedia em inglês e alemão e algumas outras postagens de blog e artigos da IBM. Mas ainda estou um pouco confuso sobre o que exatamente se trata? Alguns dizem que é sobre relacionamento entre...
Não participei do PDC 2008, mas ouvi algumas notícias de que o C # 4.0 foi anunciado para oferecer suporte à covariância e contra-variância genérica. Ou seja, List<string>pode ser atribuído a List<object>. Como poderia ser? No livro C # in Depth de Jon Skeet , é explicado por que os...
O que é um tipo de retorno covariante em Java? Em programação orientada a objetos em
Fechado . Esta questão precisa ser mais focada . Atualmente não está aceitando respostas. Quer melhorar esta questão? Atualize a pergunta para que ela se concentre em apenas um problema editando esta postagem . Fechado há 5 anos . Melhore esta...
EDIT : Reescrita esta pergunta com base na resposta original A scala.collection.immutable.Setclasse 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] =...
Encontrei isso em um livro que estou lendo em C #, mas estou tendo dificuldade em entendê-los, provavelmente devido à falta de contexto. Existe uma boa explicação concisa do que eles são e para que são úteis lá fora? Editar para esclarecimento: Interface covariante: interface IBibble<out...
Parece que um objeto List não pode ser armazenado em uma variável List em C # e nem pode ser convertido explicitamente dessa forma. List<string> sl = new List<string>(); List<object> ol; ol = sl; resulta em não é possível converter implicitamente o tipo
Estou trabalhando com o .NET framework e realmente quero ser capaz de fazer um tipo de página personalizado que todo o meu site use. O problema surge quando tento acessar a página de um controle. Desejo poder retornar meu tipo específico de página em vez da página padrão. Há alguma maneira de...
Isso é compilado corretamente no C # 7.3 (Framework 4.8): (string, string) s = ("a", "b"); (object, string) o = s; Eu sei que isso é açúcar sintático para o seguinte, que também compila corretamente: ValueTuple<string, string> s = new ValueTuple<string, string>("a",...
Por que o compilador C # permite que isso compile e lança uma exceção de tempo de execução quando executado? class Program { static void Main(string[] args) { IEnumerable<Test> list = new List<Test>() { new Test() }; foreach(IDisposable item in list) { } } } public class...