Rozumiem, że dziedziczenie metod statycznych nie jest obsługiwane w języku C #. Przeczytałem również kilka dyskusji (w tym tutaj), w których programiści twierdzą, że potrzebują tej funkcjonalności, na co typową odpowiedzią jest „jeśli potrzebujesz dziedziczenia statycznego elementu członkowskiego, w Twoim projekcie jest błąd”.
OK, biorąc pod uwagę, że OOP nie chce, żebym nawet myślał o dziedziczeniu statycznym, muszę stwierdzić, że moja widoczna potrzeba tego wskazuje na błąd w moim projekcie. Ale utknąłem. Naprawdę byłbym wdzięczny za pomoc w rozwiązaniu tego problemu. Oto wyzwanie ...
Chcę utworzyć abstrakcyjną klasę bazową (nazwijmy ją Fruit), która zawiera jakiś złożony kod inicjujący. Tego kodu nie można umieścić w konstruktorze, ponieważ część z nich będzie polegać na wywołaniach metod wirtualnych.
Owoce zostaną odziedziczone przez inne konkretne klasy (Apple, Orange), z których każda musi udostępniać standardową fabryczną metodę CreateInstance (), aby utworzyć i zainicjować instancję.
Gdyby dziedziczenie elementów statycznych było możliwe, umieściłbym metodę fabryczną w klasie bazowej i użyłbym wywołania metody wirtualnej do klasy pochodnej, aby uzyskać typ, z którego należy zainicjować konkretne wystąpienie. Kod klienta po prostu wywołałby Apple.CreateInstance () w celu uzyskania w pełni zainicjowanej instancji Apple.
Ale najwyraźniej nie jest to możliwe, więc czy ktoś może wyjaśnić, jak powinien zmienić się mój projekt, aby uwzględnić tę samą funkcjonalność.