que j'ai une interface générique qui stocke une valeur qui est tapé par le paramètre générique:Plusieurs classes qui mettent en œuvre une interface générique dans un seul tableau
public interface IFoo<TValue>
{
TValue SomeValue { get; set; }
}
Puis j'ai deux classes, StringFoo
et DoubleFoo
dont SomeValues
sont string
s et double
s respectivement:
public class StringFoo : IFoo<string>
{
string SomeValue { get; set; }
}
public class DoubleFoo : IFoo<double>
{
double SomeValue { get; set; }
}
je décide maintenant que je veux un tableau qui peut contenir les deux StringFoo
s et DoubleFoo
s:
var foos = IFoo<object>[] {
new StringFoo { SomeValue = "a value" },
new DoubleFoo { SomeValue = 123456789 }
}
Je pense que, puisque les deux string
et double
sont sous-classes de object
, ils seraient tous deux autorisés dans ce tableau. Cependant, je pensais mal.
Alors, j'ai essayé d'utiliser covariance:
public interface IFoo<out TValue>
Mais, puisque l'interface contient les deux setters et getters, je ne peux pas le faire.
Donc, peut deux classes qui implémentent une interface générique dans un tableau?
double possible de [C# - Plusieurs types génériques dans une liste] (https://stackoverflow.com/questions/353126/c-sharp-multiple-types-génériques-dans-une-liste) – Fruchtzwerg
La liste et T [] sont des constructions complètement différentes qui peuvent évidemment être converties de l'une à l'autre mais peuvent afficher un comportement très différent en fonction de la future conception du langage. décisions et leur implémentation d'exécution sous-jacente. C'est pourquoi ces questions sont entièrement différentes. Fait que les réponses d'aujourd'hui sont similaires ou la même chose n'a pas d'importance du point de vue de la théorie de la langue. –