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

C# 如何将泛型类型的类实例作为泛型类型的接口返回?,c#,generics,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;

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

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>
{

}

然而,我尝试这样做,我得到了一个无法隐式转换类型错误。

C不支持此操作

你所能做的就是

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

C不支持这一点

你所能做的就是

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

将此返回;//不,请返回此;//不,当然不行,因为这是基础,不是TI。试着公开一些你的意思是如果IFoo?问题是你们的基类并没有实现开放泛型类型的接口……不,那个并没有意义。我也不明白你为什么要这样做,没有泛型的第一段代码已经表达了你想要完成的事情TI@Igor因为我有20个不同的类,它们做Foo做的事情…返回这个;//不,请返回此;//不,当然不行,因为这是基础,不是TI。试着公开一些你的意思是如果IFoo?问题是你们的基类并没有实现开放泛型类型的接口……不,那个并没有意义。我也不明白你为什么要这样做,没有泛型的第一段代码已经表达了你想要完成的事情TI@Igor因为我有20个不同的类来做Foo做的事情…@Johnny:他在尝试使用CRTP;只要派生类做得正确,这就可以了。同意,值得一提。@Johnny:他在尝试使用CRTP;只要派生类正确地执行此操作,就可以了。同意,值得一提。