派生类的基类类型,泛型 - .net

时间:2013-06-14 10:17:48

标签: .net generics subclass

我读到了反对和协方差问题,看起来我的代码属于该类别。我只是想确认我是否在做其他错误。我正在使用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

1 个答案:

答案 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的成员。