Es ist nicht möglich, die abgeleitete Klasse über eine statische Methode abzurufen. Ein Beispiel zur Veranschaulichung: Stellen Sie sich vor, BaseClass hat 2 Unterklassen - DerivedClass und AnotherDerivedClass - welche soll zurückgegeben werden? Im Gegensatz zu polymorphen nicht-statischen Methoden gibt es keine mögliche Assoziation mit einer abgeleiteten Klasse, die eine statische Methode einer Basisklasse aufruft - der Kompilierzeittyp und der Laufzeittyp sind bei einem statischen Methodenaufruf identisch.
Sie können entweder die Methode nicht statisch machen, so dass Sie dann den richtigen Typ über Polymorphismus erhalten, oder statische Methoden-"Überschreibungen" in den Unterklassen erstellen, z. B.
class DerivedClass : BaseClass
{
void Ping() {
BaseClass.Ping();
// or alternatively
BaseClass.Ping(Type.GetType("DerivedClass"));
}
}
Ihr Client-Code kann dann die Methode in der abgeleiteten Klasse aufrufen, um explizit anzugeben, dass er die Version der abgeleiteten Klasse haben möchte. Gegebenenfalls können Sie dann auch den Typ DerivedClass als Parameter an die Methode der Basisklasse übergeben, um den Kontext zu liefern, dass die Methode über die abgeleitete Klasse aufgerufen wurde.