Я понимаю, что наследование статических методов не поддерживается в C #. Я также прочитал ряд обсуждений (в том числе здесь), в которых разработчики заявляют о необходимости этой функциональности, на что обычно отвечают: «Если вам нужно статическое наследование членов, в вашем дизайне есть изъян».
Хорошо, учитывая, что ООП не хочет, чтобы я даже думал о статическом наследовании, я должен сделать вывод, что моя очевидная потребность в нем указывает на ошибку в моем дизайне. Но я застрял. Я был бы очень признателен за помощь в решении этой проблемы. Вот вызов ...
Я хочу создать абстрактный базовый класс (назовем его Fruit), который инкапсулирует некоторый сложный код инициализации. Этот код нельзя поместить в конструктор, поскольку часть его будет зависеть от вызовов виртуальных методов.
Fruit будет унаследован другими конкретными классами (Apple, Orange), каждый из которых должен предоставлять стандартный фабричный метод CreateInstance () для создания и инициализации экземпляра.
Если бы статическое наследование членов было возможным, я бы поместил фабричный метод в базовый класс и использовал бы вызов виртуального метода к производному классу, чтобы получить тип, из которого должен быть инициализирован конкретный экземпляр. Клиентский код просто вызовет Apple.CreateInstance () для получения полностью инициализированного экземпляра Apple.
Но очевидно, что это невозможно, поэтому может кто-нибудь объяснить, как мой дизайн должен измениться, чтобы обеспечить ту же функциональность.