【发布时间】:2010-11-24 12:35:06
【问题描述】:
我在代码中有以下情况,我怀疑可能有点躲闪:
我有一堂课:
abstract class DataAccessBase<T> : IDataAccess where T : AnotherAbstractClass
这个类DataAccessBase还有一个静态工厂方法,它使用which语句中的枚举值来创建自己的派生类的实例,以决定要创建哪个派生类型:
static IDataAccess CreateInstance(TypeToCreateEnum)
现在,从DataAccessBase<T> 派生的类型本身不是通用的,它们为 T 指定了一个类型:
class PoLcZoneData : DataAccessBase<PoLcZone> // PoLcZone is derived from AnotherAbstractClass
到目前为止,我不确定这是否推动了良好使用泛型的极限,但我真正关心的是首先如何访问静态 CreateInstance() 方法:
我目前这样做的方式是简单地传递任何类型 T 其中 T :AnotherAbstractClass。特别是我通过AnotherAbstractClass 本身。这允许编译很好,但在我看来,将任何类型传递给泛型类只是为了获得静态数据有点狡猾。
实际上,我已经稍微简化了这种情况,因为DataAccessBase<T> 是继承链中的较低级别,但静态工厂方法存在于中间层,其中 PoLcZoneData 等类是在唯一级别上派生最多的,即不是通用的。
人们对这种安排有何看法?
【问题讨论】:
-
对不起,它是 C#。忘记在标题中添加了。
标签: c# generics inheritance static methods