Alles, was ich tun möchte, ist sicher machen, die Kinderklassen der Klasse Artikel eine statische Methode implementieren und ich möchte dies zum Zeitpunkt der Kompilierung überprüft werden Laufzeitfehler zu vermeiden.Wie kann ich das Erben von Klassen erzwingen, um eine statische Methode in C# zu implementieren?
abstrakte Klassen mit statischen Methoden scheinen nicht zu funktionieren:
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();
}
}
und Schnittstellen scheinen nicht zu funktionieren entweder:
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();
}
Gibt es einige wo rkaround, damit der Compiler prüft, ob erbende Klassen eine statische Methode mit einer bestimmten Signatur implementieren oder nicht?
Ich habe eine Klasse Item, die verschiedene Objekte erben, z. Kunde, Adresse usw. Und wenn eine Klasse vom Typ Item ist, möchte ich in der Lage sein, eine Factory-Methode namens GetHistoricalItem() aufzurufen. Also möchte ich sagen können Adresse address = Address.GetHistoricalItem (...). Und ich möchte zur Kompilierzeit wissen, dass all meine Klassen, die Item erben, dies tun. Es sollte genauso funktionieren, wie es beispielsweise Methoden tun. –
@EdwardTanguay das ist von vor langer Zeit, aber Sie sind besser dran, erstellen Sie eine Art von History-Klasse (Instanz), die normale Methoden zum Abrufen von Adressen enthält. Registrieren wäre zum Beispiel ein guter Name. –