我读到了反对和协方差问题,看起来我的代码属于该类别。我只是想确认我是否在做其他错误。我正在使用VS 2005(公司政策..)
我有几个课程如下:
entityBase{}
entity1 : entityBase {}
entity2 : entityBase {}
我有另一组课程如下:
dalBase<T> where T: entityBase {}
entity1Dal : dalBase<entity1>{}
entity2Dal : dalBase<entity2>{}
现在,我希望有一个工厂方法来根据参数返回dal类 - 如下所示:
public xxxType GetDalClass(pType) {
if (pType == "1") return new entity1Dal();
if (pType == "2") return new entity2Dal();
}
我的问题:这个方法的返回类型应该是什么 - 换句话说,是否存在entity1Dal和entity2Dal的公共基类?
我尝试了dalbase但它没有用。
谢谢, Saravana
答案 0 :(得分:2)
是否存在entity1Dal和entity2Dal的公共基类?
只有object
,真的。解决这个问题的一种常见方法是将DalBase<T>
类拆分为一半 - 泛型类型和非泛型类型,泛型类型派生自:
public class DalBase
{
// Any members which *don't* need to know about T
}
public class DalBase<T> : DalBase
{
// T-specific members
}
然后,您可以将方法返回类型更改为非泛型DalBase
类。
另一种选择是做同样的事情,但是使非泛型部分成为接口而不是基类。泛型类将实现接口和具有特定于T的成员。