Все, что я хочу сделать, это обеспечить, чтобы дочерние классы класса Элемент реализовали метод 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();
}
Есть ли какое-то обходное решение для этого, чтобы проверить компилятор, реализуют ли наследующие классы статический метод с определенной сигнатурой или нет?