c# - 如何返回具有泛型类型的类实例作为具有泛型类型的接口(interface)?

标签 c# generics

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

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# - 如何返回具有泛型类型的类实例作为具有泛型类型的接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49160019/

相关文章:

c# - 使用带有泛型类的 ContextBuilder 使用 Entity Framework 4 创建 EDMX/DB-Schema 的异常

c# 屏幕抓取并获取所有 cookie 以安全访问网站

c# - 寻找 MSDN TPL 数据流示例和并行化的清晰度

c# - 为什么 Ping 超时无法正常工作?

c# - 从 AutoFixture/AutoMaq 请求模拟时,NUnit 会忽略测试

java - 使用带有通配符的泛型类型作为它自己的类型

c# - 管理 TcpClient 连接

c# - 使用派生泛型派生类的实例调用方法

C# - 使用 OfType 并忽略继承的类

c# - 最佳实践列表/数组/ReadOnlyCollection 创建(和使用)