如何将具有泛型类型的类实例作为具有泛型类型的接口返回?

时间:2018-03-07 19:42:39

标签: c# generics

当我有一个简单的类和接口时,我可以这样做:

public class Foo : IFoo
{
    public IFoo Instance()
    {
        return this;
    }
}

当两者都是泛型时,有没有办法做同样的事情?

public class Base<T, TI>
{
    public TI Instance()
    {
        return this; // Nope
        return (T) this; // Nope
    }
}

public class Foo : Base<Foo, IFoo>
{

}

但是我尝试这样做,我得到一个“无法隐式转换类型”的错误。

1 个答案:

答案 0 :(得分:5)

C#不支持此功能。

你能做的最好的事情是

public class Base<T, TI> where T : Base<T, TI>, TI
{
    public TI Instance()
    {
        return (TI) (object) this; // Yep
    }
}