我有以下课程:

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/

10-12 05:52