Есть ли способ собрать (например, в списке) несколько «общих» объектов, которые не имеют общего суперкласса? Если так, как я могу получить доступ к их общим свойствам?
Например:
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);
Очевидно, что это псевдокод, это не работает.
Кроме того, мне не нужно обращаться к свойству .Value (поскольку это не безопасно для типов).
РЕДАКТИРОВАТЬ: Теперь, когда я думал об этом, можно было бы использовать подклассы для этого. Однако я думаю, что это означало бы, что мне придется писать новый подкласс для каждого нового типа.
@ Grzenio
Да, это точно ответило на мой вопрос. Конечно, теперь мне нужно продублировать весь общий интерфейс, но это не большая проблема. Я должен был подумать об этом ...
@ Ака
Вы правы насчет печати утки. Я не ожидал бы, что два совершенно случайных типа объектов будут доступны.
Но я думал, что универсальные объекты будут иметь какой-то общий интерфейс, поскольку они абсолютно одинаковы, за исключением типа, которым они параметризуются. По-видимому, это не так автоматически.