Quelle est la différence entre <out T>et <T>? Par exemple: public interface IExample<out T> { ... } contre. public interface IExample<T> { ...
La covariance, la contravariance et l'invariance décrivent comment la hiérarchie d'héritage de type existante change lorsqu'elle est soumise à une certaine transformation (comme l'utilisation dans les génériques). Si la transformation conserve l'ordre de la hiérarchie d'origine, elle est "covariante". S'il l'inverse, il est «contravariant». S'il le casse, il est "invariant".
Quelle est la différence entre <out T>et <T>? Par exemple: public interface IExample<out T> { ... } contre. public interface IExample<T> { ...
Alors que nous pouvons hériter de la classe / interface de base, pourquoi ne pouvons-nous pas déclarer un List<> utilisant la même 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 =...
J'ai un peu de mal à comprendre comment j'utiliserais la covariance et la contravariance dans le monde réel. Jusqu'à présent, les seuls exemples que j'ai vus sont le même ancien exemple de tableau. object[] objectArray = new string[] { "string 1", "string 2" }; Ce serait bien de voir un exemple qui...
Tiré de Effective Java par Joshua Bloch, Les tableaux diffèrent du type générique de deux manières importantes. Les premiers tableaux sont covariants. Les génériques sont invariants. Covariant signifie simplement que si X est un sous-type de Y, alors X [] sera également un sous-type de Y []. Les...
IEnumerable<T>est co-variant mais il ne prend pas en charge le type valeur, seulement le type référence. Le code simple ci-dessous est compilé avec succès: IEnumerable<string> strList = new List<string>(); IEnumerable<object> objList = strList; Mais changer de stringà...
На этот вопрос есть ответы на Stack Overflow на русском : Ковариантность и контрвариантность обобщений J'ai du mal à comprendre la différence entre la covariance et la contravariance.
Suite à cette question , quelqu'un peut-il expliquer ce qui suit dans Scala: class Slot[+T] (var some: T) { // DOES NOT COMPILE // "COVARIANT parameter in CONTRAVARIANT position" } Je comprends la distinction entre +Tet Tdans la déclaration de type (elle compile si j'utilise T). Mais alors comment...
J'ai une private readonlyliste de LinkLabels ( IList<LinkLabel>). J'ajoute plus tard des LinkLabels à cette liste et ajoute ces étiquettes à un FlowLayoutPanelcomme suit: foreach(var s in strings) { _list.Add(new LinkLabel{Text=s}); } flPanel.Controls.AddRange(_list.ToArray()); ReSharper me...
Je ne comprends pas pourquoi le code C # suivant ne se compile pas. Comme vous pouvez le voir, j'ai une méthode générique statique Something avec un IEnumerable<T>paramètre (et Test contraint d'être une IAinterface), et ce paramètre ne peut pas être converti implicitement en...
Aujourd'hui, j'ai lu quelques articles sur la Covariance, la Contravariance (et l'Invariance) en Java. J'ai lu l'article de Wikipédia en anglais et en allemand, ainsi que d'autres articles de blog et articles d'IBM. Mais je suis toujours un peu confus sur ce que c'est exactement? Certains disent...
Je n'ai pas assisté à PDC 2008, mais j'ai entendu des nouvelles selon lesquelles C # 4.0 est annoncé pour prendre en charge la covariance et la contra-variance génériques. Autrement dit, List<string>peut être attribué à List<object>. Comment cela pourrait-il être? Dans le livre C # in...
Qu'est-ce qu'un type de retour covariant en Java? Dans la programmation orientée objet en
Fermé . Cette question doit être plus ciblée . Il n'accepte pas les réponses actuellement. Vous souhaitez améliorer cette question? Mettez à jour la question pour qu'elle se concentre sur un problème uniquement en éditant ce message . Fermé il y a 5 ans . Améliorez cette question Veuillez montrer...
EDIT : réécrit cette question en fonction de la réponse originale La scala.collection.immutable.Setclasse n'est pas covariante dans son paramètre de type. Pourquoi est-ce? import scala.collection.immutable._ def foo(s: Set[CharSequence]): Unit = { println(s) } def bar(): Unit = { val s:...
Il semble qu'un objet List ne peut pas être stocké dans une variable List en C #, et ne peut même pas être explicitement converti de cette façon. List<string> sl = new List<string>(); List<object> ol; ol = sl; résultats dans Impossible de convertir implicitement le type...
Cela se compile correctement en C # 7.3 (Framework 4.8): (string, string) s = ("a", "b"); (object, string) o = s; Je sais que c'est du sucre syntaxique pour les éléments suivants, qui se compile également correctement: ValueTuple<string, string> s = new ValueTuple<string, string>("a",...