6

可能重复:
如何强制继承类在 C# 中实现静态方法?

我理解抽象和静态是相反的,但我想强制派生类实现静态方法。我怎样才能做到这一点?

在 SimonC 之后编辑:在尝试描述我想要做的事情时,我意识到超类的静态方法将无法调用被覆盖的子类版本。

但是 olivier 的替代解决方案看起来不错。

4

3 回答 3

15

将静态行为与继承或接口实现相结合的一种可能方法是使用单例模式。对单例对象的访问是静态的,但是该对象是使用new“普通”对象创建的

public interface ISomeInterface { ... }

public class SomeClass : ISomeInterface
{ 
    public static readonly SomeClass Instance = new SomeClass();

    private SomeClass()
    { 
    }

    // TODO: Implement ISomeInterface
    // and/or override members from a base class.
}

访问单例的方法

ISomeInterface obj = SomeClass.Instance; // Static access to interface.
var y = obj.SomeMethod(x);
于 2012-11-26T14:53:29.093 回答
4

你不能。静态方法不受多态行为的影响。你甚至不能自愿重写静态方法,更不用说强制一个类重写它们了。

于 2012-11-26T14:42:41.300 回答
3

对不起,但这是不可能的。抽象类和/或基类都是关于对象继承的。

static方法特定于一个且仅一个类,并且不可继承。

于 2012-11-26T14:44:36.057 回答