继承在泛型抽象对象工厂中不能正常工作
本文关键字:常工作 工作 不能 泛型 抽象 对象 工厂 继承 | 更新日期: 2023-09-27 18:10:53
当我希望类层次结构的某些成员具有特殊的构造代码而任何其他成员具有泛型构造函数时,我有以下基本对象工厂。
我这里的问题是,TileFactory没有方法GetInstance-我的程序不会编译,如果我试图调用TileFactory.GetInstance()。任何建议吗?
public static class ObjectFactory<K>
{
public static T GetInstance<T>() where T : K
{
T obj = (T)Activator.CreateInstance(typeof(T));
return obj;
}
//snip
}
}
//snip
public static class TileFactory : ObjectFactory<Tile>
{
}
为什么我不能继承静态类?
引用自此处:
这实际上是设计的。似乎没有很好的理由继承静态类。它具有公共静态成员,您总是可以通过类名本身访问这些成员。我所看到的继承静态内容的唯一原因都是不好的,比如节省几个输入字符。
可能有理由考虑将静态成员直接带入作用域的机制(事实上,我们将在Orcas产品周期之后考虑这一点),但是静态类继承不是可行的方法:使用这种机制是错误的,并且只适用于碰巧驻留在静态类中的静态成员。
(Mads Torgersen, c#语言PM)
channel9的其他意见
. net中的继承仅适用于实例基。静态方法是在类型级别而不是实例级别定义的。这就是为什么重写不能用于静态方法/属性/事件…
静态方法只在内存中保存一次。没有为它们创建虚拟表等。如果你在。net中调用一个实例方法,你总是给它当前实例。这是由。net运行时隐藏的,但它确实发生了。每个实例方法的第一个参数是指向该方法运行的对象的指针(引用)。这在静态方法中不会发生(因为它们是在类型级别上定义的)。编译器应该如何决定选择要调用的方法?
(littleguru)作为一个有价值的想法,littleuru有一个局部的"解决方案":Singleton模式。
http://www.dofactory.com/Patterns/PatternSingleton.aspx静态事物没有继承。一个解决方法是使用单例。