Все, что я хочу сделать, это убедиться, , что дочерние классы класса Item реализуют метод static , и я хочу, чтобы это проверялось во время компиляции чтобы избежать ошибок во время выполнения.
абстрактные классы со статическими методами не работают:
ОШИБКА: статический член
не может быть помечен как
переопределить, виртуальный или абстрактный
public abstract class Item
{
public static abstract Item GetHistoricalItem(int id, DateTime pastDateTime);
}
public class Customer : Item
{
public static override Customer GetHistoricalItem(int id, DateTime pastDateTime)
{
return new Customer();
}
}
public class Address : Item
{
public static override Address GetHistoricalItem(int id, DateTime pastDateTime)
{
return new Address();
}
}
и интерфейсы тоже не работают:
ОШИБКА: клиент не реализует интерфейс
член GetHistoricalItem ()
public class Customer : Item, HistoricalItem
{
public static Customer GetHistoricalItem(int id, DateTime pastDateTime)
{
return new Customer();
}
}
public class Address : Item, HistoricalItem
{
public static Address GetHistoricalItem(int id, DateTime pastDateTime)
{
return new Address();
}
}
interface HistoricalItem
{
Item GetHistoricalItem();
}
Есть ли обходной путь, чтобы компилятор проверял, реализуют ли наследующие классы статический метод с определенной сигнатурой или нет?