Gibt es eine Möglichkeit, mehrere "generische" Objekte, die keine gemeinsame Oberklasse haben, zu sammeln (z. B. in einer Liste)? Wenn ja, wie kann ich auf ihre gemeinsamen Eigenschaften zugreifen?
Zum Beispiel:
class MyObject<T>
{
public T Value { get; set; }
public string Name { get; set; }
public MyObject(string name, T value)
{
Name = name;
Value = value;
}
}
var fst = new MyObject<int>("fst", 42);
var snd = new MyObject<bool>("snd", true);
List<MyObject<?>> list = new List<MyObject<?>>(){fst, snd};
foreach (MyObject<?> o in list)
Console.WriteLine(o.Name);
Das ist natürlich nur Pseudocode, der nicht funktioniert.
Ich brauche auch nicht auf die Eigenschaft .Value zuzugreifen (da dies nicht typsicher wäre).
EDITAR: Nun, da ich darüber nachgedacht habe, wäre es möglich, Unterklassen für diese zu verwenden. Allerdings denke ich, das würde bedeuten, dass ich eine neue Unterklasse für jeden neuen Typ schreiben müsste.
@ Grzenio Ja, genau das hat meine Frage beantwortet. Natürlich muss ich jetzt die gesamte gemeinsame Schnittstelle duplizieren, aber das ist kein großes Problem. Daran hätte ich denken sollen...
@ aku Sie haben Recht, was das Tippen von Enten betrifft. Ich würde nicht erwarten, dass zwei völlig zufällige Arten von Objekten zugänglich sind.
Ich dachte aber, dass generische Objekte eine Art gemeinsame Schnittstelle haben, da sie abgesehen von dem Typ, den sie parametrisieren, genau gleich sind. Offenbar ist dies nicht automatisch der Fall.