Как заставить абстрактные дочерние элементы для реализации статического метода?

Возможный дубликат:
Как заставить наследовать классы для реализации статического метода в С#?

Я понимаю, что абстрактные и статические противоположны, но я хочу заставить производные классы реализовать статический метод. как я могу это сделать?

Изменить после SimonC: Пытаясь описать, что я хочу сделать, я понял, что статические методы суперкласса не смогут вызывать переопределенную версию подкласса.

Но альтернативное решение для olivier выглядит хорошо.

Ответ 1

Возможным подходом к объединению статического поведения с наследованием или реализацией интерфейса является использование одноэлементного шаблона. Доступ к объекту singleton является статическим, но объект создается с помощью new как "нормальный" объект

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).
}

Доступ к методу singleton

ISomeInterface obj = SomeClass.Instance; // Static access to interface.
var y = obj.SomeMethod(x);

Ответ 2

Вы не можете. Статические методы не подвержены полиморфному поведению. Вы не можете даже переопределить статические методы добровольно, не говоря уже о том, чтобы заставить класс переопределять их.

Ответ 3

Извините, но это невозможно. Абстрактные и/или базовые классы относятся к наследованию объектов.

static методы специфичны только для одного и только одного класса и НЕ наследуются.