C# 使用泛型类型接口创建对象实例时发生编译错误
我有一个接收泛型类型的接口,我们称它为IFoo。该泛型类型被约束为由另一个接口IBar实现。这两个接口定义如下:C# 使用泛型类型接口创建对象实例时发生编译错误,c#,inheritance,interface,casting,covariance,C#,Inheritance,Interface,Casting,Covariance,我有一个接收泛型类型的接口,我们称它为IFoo。该泛型类型被约束为由另一个接口IBar实现。这两个接口定义如下: internal interface IFoo<out TBar> where TBar : IBar { } internal interface IBar { } 为什么编译器不够“聪明”,不能理解IFoo或具有泛型类型IBar的IFoo是同一件事?为什么强制转换不起作用?如果我理解这个问题,您需要制作SpecificFoo实现IFoo internal clas
internal interface IFoo<out TBar> where TBar : IBar
{
}
internal interface IBar
{
}
为什么编译器不够“聪明”,不能理解IFoo或具有泛型类型IBar的IFoo是同一件事?为什么强制转换不起作用?如果我理解这个问题,您需要制作
SpecificFoo
实现IFoo
internal class SpecificFoo : IFoo<SpecificBar>, IFoo
{ .. }
内部类特定foo:IFoo,IFoo
{ .. }
这样你就可以
IFoo correctFoo = new SpecificFoo();
//and
IFoo<IBar> anotherFoo = correctFoo;
IFoo correctFoo=newspecificfoo();
//及
IFoo anotherFoo=正确的foo;
IFoo
和IFoo
不是一回事IFoo
是IFoo
的一个子类型,因此IFoo
是IFoo
,但是IFoo
不一定是IFoo
@Luke Woodward,尽管IFoo与IFoo没有直接关系,就像其他方式一样,因为我限制TBar实现IBar,我想他们应该是一样的是的,这很有效!谢谢!这是有道理的,SpecificFoo和IFoo之间需要有直接的关系,因为IFoo不一定是IFoo,就像@Luke Woodward说的那样
internal interface IFoo : IFoo<IBar>
{
}
// Compile error!!
IFoo incorrectFoo = new SpecificFoo();
// Cast error!!
IFoo alsoIncorrectFoo = (IFoo)new SpecificFoo();
internal class SpecificFoo : IFoo<SpecificBar>, IFoo
{ .. }
IFoo correctFoo = new SpecificFoo();
//and
IFoo<IBar> anotherFoo = correctFoo;