0

我阅读了有关 contra 和 covariance 问题的信息,看起来我的代码属于该类别。我只是想确认我是否做错了什么。我正在使用 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,但它没有用。

谢谢,萨拉瓦娜

4

1 回答 1

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

于 2013-06-14T10:22:21.010 回答