我有以下课程:
public abstract class ThingBase { }
public class ThingA : ThingBase { }
以及以下通用类:
public class ThingOwner<ThingType> where ThingType : ThingBase { }
我想创建一个ThingOwner实例,如下所示:
ThingOwner<ThingBase> thingOwner = new ThingOwner<ThingA>();
使用此代码,出现以下错误:“无法将类型'ThingOwner(ThingA)'隐式转换为'ThingOwner(ThingBase)'”。
我不知道如何使它工作。我知道关于泛型类和继承的讨论很多,但我几乎尝试了所有事情,但找不到适合我的解决方案。
谢谢!
最佳答案
您应该使用C#4.0中引入的covariance for generic types。为此,您需要使用接口而不是类:
public interface IThingOwner<out ThingType> where ThingType : ThingBase { }
public class ThingOwner<ThingType> : IThingOwner<ThingType>
where ThingType : ThingBase
{
}
IThingOwner<ThingBase> thingOwner = new ThingOwner<ThingA>();
关于c# - 如何在C#中使用抽象约束实例化泛型类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21673300/