为什么给出以下类
class ParentClass<T>{ }
class ChildClass : IInterface{ }
interface IInterface{ }
当我尝试使用以下代码从ParentClass<ChildClass>
类型转换为ParentClass<IInterface>
时,是否会收到编译时错误“无法转换类型”。
var concreteGeneric = new ParentClass<ChildClass>();
var interfaceGeneric = (ParentClass<IInterface>)concreteClass;
答案 0 :(得分:1)
这里你需要的是协方差和(如@xanatos所提到的)它只支持接口。如果您向ParentClass添加了一个界面,则可以转换为IParentClass<IInterface>
并获得您要查找的功能。
class ParentClass<T> : IParentClass<T> where T : IInterface { }
class ChildClass : IInterface { }
interface IInterface { }
interface IParentClass<out T> where T : IInterface { }
public void TestMethodX()
{
var concreteGeneric = new ParentClass<ChildClass>();
var interfaceGeneric = (IParentClass<IInterface>)concreteGeneric;
}
答案 1 :(得分:0)
尝试精确指定哪个接口扩展T
class ParentClass<T> where T:IInterface { }