Ich verstehe, dass die Vererbung statischer Methoden in C # nicht unterstützt wird. Ich habe auch eine Reihe von Diskussionen gelesen (einschließlich hier), in denen Entwickler behaupten, dass diese Funktionalität benötigt wird. Die typische Antwort lautet: "Wenn Sie eine statische Mitgliedervererbung benötigen, liegt ein Fehler in Ihrem Design vor."
OK, da OOP nicht möchte, dass ich überhaupt über statische Vererbung nachdenke, muss ich zu dem Schluss kommen, dass mein offensichtlicher Bedarf darauf auf einen Fehler in meinem Design hinweist. Aber ich stecke fest. Ich würde mich sehr über Hilfe bei der Lösung dieses Problems freuen. Hier ist die Herausforderung ...
Ich möchte eine abstrakte Basisklasse erstellen (nennen wir es eine Frucht), die einen komplexen Initialisierungscode enthält. Dieser Code kann nicht in den Konstruktor eingefügt werden, da ein Teil davon auf virtuellen Methodenaufrufen beruht.
Obst wird von anderen konkreten Klassen (Apple, Orange) geerbt, von denen jede eine Standard-Factory-Methode CreateInstance () verfügbar machen muss, um eine Instanz zu erstellen und zu initialisieren.
Wenn eine Vererbung statischer Elemente möglich wäre, würde ich die Factory-Methode in die Basisklasse einfügen und einen virtuellen Methodenaufruf an die abgeleitete Klasse verwenden, um den Typ zu erhalten, von dem eine konkrete Instanz initialisiert werden muss. Der Client-Code würde einfach Apple.CreateInstance () aufrufen, um eine vollständig initialisierte Apple-Instanz zu erhalten.
Dies ist jedoch eindeutig nicht möglich. Kann jemand erklären, wie sich mein Design ändern muss, um die gleiche Funktionalität zu gewährleisten?