可能重复:
How can I force inheriting classes to implement a static method in C#?
我理解抽象和静态是相反的,但我想强制派生类来实现静态方法。我怎么能这样做?
SimonC之后编辑: 在尝试描述我想要做的事情时,我意识到超类的静态方法将无法调用被覆盖的子类版本。
但是奥利维尔的另类解决方案看起来不错。
答案 0 :(得分:14)
将静态行为与继承或接口实现相结合的一种可能方法是使用单例模式。对单例对象的访问是静态的,但该对象是使用new
创建的,例如" normal"对象
public interface ISomeInterface { ... }
public class SomeClass : ISomeInterface
{
public static readonly SomeClass Instance = new SomeClass();
private SomeClass()
{
}
// Implement ISomeInterface
// or override an abstract member from a base class (not shown here).
}
访问单身人士的方法
ISomeInterface obj = SomeClass.Instance; // Static access to interface.
var y = obj.SomeMethod(x);
答案 1 :(得分:4)
你做不到。静态方法不受多态行为的影响。你甚至不能自愿地覆盖静态方法,更不用说强制一个类来覆盖它们了。
答案 2 :(得分:3)
抱歉,但这是不可能的。抽象和/或基类都是关于对象继承的。
static
方法仅适用于一个且只有一个类,并且 NOT 可继承。