Tutto quello che voglio fare è assicurarsi che classi figlie della classe Item implementare un metodo staticoe voglio questo da controllare al momento della compilazione per evitare errori di runtime.Come posso forzare l'ereditazione delle classi per implementare un metodo statico in C#?
classi astratte con metodi statici non sembrano funzionare:
ERROR: A static member cannot be marked as override, virtual, or abstract
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();
}
}
e interfacce non sembra funzionare sia:
ERROR: Customer does not implement interface member 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();
}
C'è un po ' rkaround per fare in modo che il compilatore verifichi se l'ereditarietà delle classi implementa un metodo statico con una certa firma o no?
Ho un elemento di classe che eredita vari oggetti, ad es. Cliente, Indirizzo, ecc. E se una classe è di tipo Item, allora voglio essere in grado di chiamare un metodo factory chiamato GetHistoricalItem(). Quindi voglio essere in grado di dire indirizzo Address = Address.GetHistoricalItem (...). E voglio sapere al momento della compilazione che tutte le mie classi che ereditano Item lo fanno. Dovrebbe funzionare come i metodi per esempio. –
@EdwardTanguay questo è da molto tempo fa, ma è meglio creare qualche tipo di classe History (istanza) che contenga metodi normali per il recupero degli indirizzi. Il registro sarebbe un buon nome, per esempio. –