为什么泛型没有看到我的遗产?

时间:2013-10-29 08:11:17

标签: c# .net generics

这是我正在使用的代码,它在实例化时出现构建错误。我不确定为什么它没有看到我的SpecialHandler是BaseHandler类型,T设置为SpecialEntity

static class HandlerFactory
{
    public static BaseHandler<BaseEntity> Create(string typeString)
    {
        throw new NotImplementedException();
    }

    public static BaseHandler<T> Create<T>(string typeString )  where T : BaseEntity {
        if (typeString == "Special")
            **return new SpecialHandler();** //THERE'S BUILD ERROR HERE EVEN THOUGH Special Handler is inherits from type BaseHandler<T>
        else
            return null;
    }
}

public class BaseHandler<T>  where T : BaseEntity
{
    public T GetEntity()
    {
        throw new NotImplementedException();
    }
}

public class SpecialHandler : BaseHandler<SpecialEntity> {}

public class BaseEntity{}

public class SpecialEntity : BaseEntity{}

1 个答案:

答案 0 :(得分:2)

(使用我的通灵调试技巧推断出问题)

除非另有规定(并且它仅适用于界面),遗传参数是不变的,即精确 定义为List<Mammal>的集合与定义为List<Animal>的集合或定义为List<Cat>的集合无任何关联。

Create方法表示它返回BaseHandler<BaseEntity>而不是BaseHandler<SpecialEntity>,而您的SpecialHandler是_ BaseHandler<SpecialEntity>,但它不是BaseHandler<BaseEntity>