【发布时间】:2012-11-14 01:25:22
【问题描述】:
可能重复:
How can I force inheriting classes to implement a static method in C#?
我理解抽象和静态是相反的,但我想强制派生类实现静态方法。我该怎么做?
在 SimonC 之后编辑: 在尝试描述我想要做的事情时,我意识到超类的静态方法将无法调用被覆盖的子类版本。
但 olivier 的替代解决方案看起来不错。
【问题讨论】:
-
简而言之,你不能。为什么要这样做?
-
这里的一个用例是有一个静态的“CreateDefault”方法,它返回父类的一个对象,但每个子类都会覆盖它。现在我明白它实际上没有意义,因为为了使用它,您仍然需要使用子的静态上下文调用 CreateDefault,这违背了使用继承的目的。在我看来,这里寻求的真正优势是编译器时间检查子类是否实现了静态方法。
-
同样,这并没有太大帮助,因为它不会强制您的静态方法在任何地方使用。我认为奥利维尔答案中的单身想法确实是最好的。我同意@SimonC 的观点,即开发人员应该退后一步,通过尝试在父类中使用静态方法并在子类中覆盖来弄清楚他们真正想要完成的工作。