-3

这是我正在使用的代码,它在实例化时出现构建错误。我不确定为什么没有看到我的 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{}
4

1 回答 1

2

(用我的心理调试技巧来推断问题)

除非指定(无论如何它只适用于接口),遗传参数是不变的,即精确的。
定义为 a的集合与定义为的集合或List<Mammal>定义为 的集合没有任何关系。List<Animal>List<Cat>

Create方法说它返回 a BaseHandler<BaseEntity>,而不是 a BaseHandler<SpecialEntity>,并且您的SpecialHandleris-a BaseHandler<SpecialEntity>,但它不是 a BaseHandler<BaseEntity>

于 2013-10-29T08:16:01.757 回答