如何从通用接口调用接口方法

时间:2013-04-17 14:03:48

标签: c#

让我们说,我有一个通用接口

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));

我相信这甚至不可能,但也许我忘记了什么?

1 个答案:

答案 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);
    }
}