Я розумію, що успадкування статичних методів не підтримується в C #. Я також прочитав ряд обговорень (в тому числі тут), в яких розробники заявляють про необхідність цієї функціональності, на що типовою відповіддю є "якщо вам потрібне статичне успадкування членів, у вашому дизайні є недолік".
Добре, враховуючи, що ООП не хоче, щоб я навіть думав про статичне успадкування, я повинен зробити висновок, що моя очевидна потреба в ньому вказує на помилку в моєму дизайні. Але, я застряг. Я був би дуже вдячний за допомогу у вирішенні цієї проблеми. Ось виклик ...
Я хочу створити абстрактний базовий клас (назвемо його Fruit), який інкапсулює якийсь складний код ініціалізації. Цей код не можна розмістити в конструкторі, оскільки деякі з них покладаються на виклики віртуальних методів.
Фрукти успадковуватимуться іншими конкретними класами (Apple, Orange), кожен з яких повинен мати стандартний заводський метод CreateInstance () для створення та ініціалізації екземпляра.
Якби статичне успадкування членів було здійсненним, я б розмістив фабричний метод у базовому класі та використовував виклик віртуального методу до похідного класу, щоб отримати тип, з якого конкретний екземпляр повинен бути ініціалізований. Клієнтський код просто викликає Apple.CreateInstance (), щоб отримати повністю ініціалізований екземпляр Apple.
Але очевидно, що це неможливо, тому хтось може пояснити, як мій дизайн повинен змінюватися, щоб забезпечити ті самі функції.