3

我有一个带有类型参数的对象 - 调用它Object<T>- 并且需要能够将许多具有不同类型参数的对象添加到列表中,如下所示:

var obj1 = new Object<SomeType>();
var obj2 = new Object<SomeOtherType>();

var list = new List<Object<WhatGoesHere>{ obj1, obj2 };

我知道我可以使用一个接口,如果它只是一个不同对象的列表,但这似乎不适用于具有不同类型参数的对象列表,所以我有兴趣知道我的选项在这里?

4

1 回答 1

4

通常最好创建一个界面。我的大多数泛型类都有接口,可以在不知道泛型参数的情况下使用它们。

interface IFoo
{
  object UntypedBlah(object arg);
}

class Foo<T> : IFoo
{
  object UntypedBlah(object arg)
  {
    return Blah((T)arg);
  }

  T Blah(T arg)
  {
    //...
  }

}

List<IFoo> foos = new List<IFoo>();
foos.Add(new Foo<int>());
foos.Add(new Foo<string>());
  • 你也可以使它成为协变的。(接口将有一个协变的泛型参数。这取决于你在接口上需要的成员是否有意义。)
  • 您可以为它们赋予相同的名称并显式地实现它们,而不是使用“无类型”成员。但有时你会遇到复杂的接口和类层次结构时遇到麻烦,给它们起一个不同的名字可能更容易。
于 2013-07-02T05:45:32.760 回答