Данный базовый тип A
И три производных типа B: AC: AD: A
У меня есть проект P. Я хочу, чтобы список представлял вхождения A в P.
Существует стратегия для извлечения Bs из P, который я хочу быть частью класса B. Есть стратегия для извлечения Cs из P, который я хочу быть частью класса C. и т.д. Я хочу, чтобы они всебыть перечисленным в одном большом Списке.
Я хочу позже иметь возможность добавить класс E: A, касаясь как можно меньше.Было бы здорово иметь виртуальный статический метод Factory на A, принимающий экземпляр P в качестве параметра, который полиморфно запускал бы все статические перегрузки в производных классах, где, например, перегрузка в C извлекала бы C из P и помещала их в List.Конечно, в C # не существует такого понятия, как виртуальный статический метод.
Я не могу сразу увидеть, как реализовать это, чтобы можно было добавлять классы D: A и E: A, не касаясьбазовый класс или какой-то постоянно обновляемый фабричный метод «Бого-метода» с конкретной зависимостью от каждого производного типа.
Здесь довольно поздно, поэтому я могу упустить что-то очевидное.Ваши мысли?
РЕДАКТИРОВАТЬ:
Мой конкретный случай заключается в том, что у меня есть система управления технологической установки, состоящая из модулей управления.Я хочу иметь возможность распознавать некоторые конструкции более высокого уровня, такие как цикл управления, настройка обратной связи и т. Д. Логика распознавания и управления этими конструкциями специфична для конкретного типа рассматриваемой конструкции.Короче говоря, я хочу связать код для идентификации и обработки конструкций.
Давайте рассмотрим аналогию.У меня есть текстовый документ.В нем есть типы слов.Слово «базовый» тип «А».Текстовый документ - это проект "P".Я могу реализовать слова типа «существительное» и «глагол».Способ, которым «существительное» идентифицируется в тексте, является специфическим для «существительного», и код должен.Список становится длиннее по мере того, как все больше и больше типов внедряются и, таким образом, идентифицируются в тексте.
Для меня имеет смысл реализовать это в существительном классе следующим образом:
static function IEnumerable<noun> IdentifyAll (P project)
И сделать
CompleteWordList.AddRange(noun.IdentifyAll(p));
Во время инициализации, но это создает зависимостьк определенному типу "существительное" из центрального метода инициализации / фабрики.Тогда было бы трудно добавить больше классов слов, не касаясь его.Когда я пишу это, я чувствую, что склоняюсь к МЭФ.
Это простой пример.Может быть, «фраза» или что-то было бы более подходящей аналогией для базового типа, но сейчас это нужно сделать.
Даже если эти проекты представляют собой сети связанных управляющих узлов с проверяемыми свойствами (а нетекстовый документ как таковой), это очень похоже на парсер.Было бы хорошо, если бы было какое-то общее решение, которое ускользает от меня.