Как заставить абстрактные дочерние элементы для реализации статического метода?
Возможный дубликат:
Как заставить наследовать классы для реализации статического метода в С#?
Я понимаю, что абстрактные и статические противоположны, но я хочу заставить производные классы реализовать статический метод. как я могу это сделать?
Изменить после 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
методы специфичны только для одного и только одного класса и НЕ наследуются.