不完全确定如何表达这个问题,因为它是"为什么这不起作用?" 查询类型.
我已将我的特定问题减少到此代码:
public interface IFoo { } public class Foo : IFoo { } public class Barwhere T : IFoo { public Bar(T t) { } public Bar() : this(new Foo()) // cannot convert from 'Foo' to 'T' { } }
现在,通用类型T
的Bar
类必须实现IFoo的.那么为什么编译器会在评论中给出错误?当然,Foo的一个实例是IFoo,因此可以作为泛型类型的代表传递T
?
这是编译器限制还是我遗漏了什么?
您还可以使用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 Barwhere T : IFoo, new() { public Bar(T t) { } public Bar() : this(new T()) { } }
所以你可以拥有
BarbarFoo = new Bar (); Bar barFiz = new Bar ();