让我们说,我有一个通用接口
IWhatEver<T> : where T : ....
{
T DoStuff(object value);
}
class Foo : IWhatEver<string> {...}
class Bar: IWhatEver<double> {...}
此接口由几个类实现。
如何在列表中存储此接口的实例以及如何调用DoStuff函数?
这样的事情:
List<IWhatEver<????>> whatEvers = new List<IWhatEver<????>>(); // doesnt work...
whatEvers.Add(new Foo());
whatEvers.Add(new Bar());
var whatWillThisBe = whatEvers.Select(w => w.DoStuff(withSomeObject));
我相信这甚至不可能,但也许我忘记了什么?
答案 0 :(得分:2)
一种选择是创建一个非通用的基本接口并从中继承泛型
IWhatEver
{
object DoStuff(object value);
}
IWhatEver<T> : IWhatEver where T : ....
{
new T DoStuff(object value);
}
您还可以拥有一个基本抽象类,它继承自IWhatEver并通过调用IWhatEver.DoStuff
显式实现IWhatEver<T>.DoStuff
。
abstract class BaseWhatEver<T> : IWhatEver<T>
{
abstract T DoStuff(object value);
object IWhatEver.DoStuff(object value)
{
return ((IWhatEver<T>) this)DoStuff(value);
}
}