Во-первых, объясняя ваше конкретное сообщение об ошибке: вы не можете наследовать статические члены, потому что они принадлежат определенному типу, а не экземпляру типа. Модификаторы наследования, такие как override, virtual и abstract, не применяются к статическим элементам.
Второй:
Как правило, когда вы следуете фабричному шаблону, у вас есть фабричный класс, задачей которого является создание экземпляров конкретных классов и возврат этих экземпляров, приведенных в качестве базового класса или интерфейса. Детали варьируются в зависимости от того, как фабрика выбирает конкретный класс для создания экземпляра, и я не буду вдаваться в подробности, но на фундаментальном уровне это именно то, что делает фабрика.
Таким образом, чтобы создать фабричный шаблон с использованием предоставленного вами примера, вам понадобится как минимум четыре типа, которые, следуя вашему примеру, могут быть названы ReaderBase
, ReaderFactory
, CsvReader
и FixedWidthReader
. Вместо ReaderBase
вы можете рассмотреть IReader
- выбор зависит от того, реализует ли ваш абстрактный класс какие-либо функции, общие для всех Readers
.
CsvReader
и FixedWidthReader
наследуются от IReader
или ReaderBase
, а ReaderFactory
имеет как минимум один вызванный метод, например, InstantiateReader
, который возвращает IReader
или ReaderBase
. InstantiateReader
выполняет работу по определению, следует ли создавать экземпляр CsvReader
или FixedWidthReader
, основываясь на некоторых внешних критериях.