当前位置:  开发笔记 > 编程语言 > 正文

通用约束和接口实现/继承

如何解决《通用约束和接口实现/继承》经验,为你挑选了1个好方法。

不完全确定如何表达这个问题,因为它是"为什么这不起作用?" 查询类型.

我已将我的特定问题减少到此代码:

public interface IFoo
{
}

public class Foo : IFoo
{
}

public class Bar where T : IFoo
{
    public Bar(T t)
    {
    }

    public Bar()
        : this(new Foo()) // cannot convert from 'Foo' to 'T'
    {
    }
}

现在,通用类型TBar必须实现IFoo的.那么为什么编译器会在评论中给出错误?当然,Foo的一个实例是IFoo,因此可以作为泛型类型的代表传递T

这是编译器限制还是我遗漏了什么?



1> Andrew Kenna..:

您还可以使用Fiz以任何其他方式实现与Foo无关的IFoo:

public interface IFoo
{
}

public class Foo : IFoo
{
}

public class Fiz : IFoo
{
}

Foo foo = new Foo();
Fiz fiz = foo; // Not gonna compile.

你想要的可能更像是:

public class Bar where T : IFoo, new()
{
    public Bar(T t)
    {
    }

    public Bar()
        : this(new T()) 
    {
    }
}

所以你可以拥有

Bar barFoo = new Bar();
Bar barFiz = new Bar();

推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有