有没有一种方法可以收集(例如在列表中)多个不共享共同超类的“通用”对象?如果是这样,我如何访问它们的共同属性?
例如:
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 是的,那正好回答了我的问题。当然,现在我需要复制整个共享界面,但这不是一个大问题。我本应该想到这一点...
@aku 你关于鸭子类型的说法是正确的。我不会期望两种完全随机的对象可以被访问。
但我认为通用对象应该共享某种公共接口,因为它们完全相同,除了它们所参数化的类型。显然,这并不是自动的。