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;只要派生类正确地执行此操作,就可以了。同意,值得一提。