Создание списка объектов из производных классов во время выполнения
ФОН
У меня есть класс под названием "Tests. cs", который содержит абстрактный базовый класс под названием" Test", а затем у меня есть еще куча написанных классов, которые все являются производными от Test.
Во время выполнения я хочу иметь возможность выбирать экземпляры этих производных классов и добавлять их в список, который затем сохраняю на диске для повторного вызова в другое время.
СОВЕТ
Очевидный способ сделать это-жестко закодировать один экземпляр каждого тестового класса и добавить его в главный список, чтобы во время выполнения я мог сгенерировать таблицу из этого списка, из которой пользователь затем может выбрать свой собственный список тестовых объектов, которые он сохранит на диске.
Это приемлемое решение (оно работает), но я ожидаю, что новые тестовые классы будут разработаны в течение срока службы продукта, и для того, чтобы это новое программное обеспечение было доступно для использования в программе, мне придется каждый раз не забывать добавлять его экземпляр в основной список.
Мне интересно, есть ли какой-то способ генерировать список производных тестовых классов во время выполнения, который не зависит от жестко закодированного списка экземпляров класса.
Что я уже пробовал:
Я попытался создать мастер-список, содержащий по одному экземпляру каждого тестового класса, который считывается во время выполнения. Это работает, но я хотел бы понять, есть ли лучшие способы сделать это.
F-ES Sitecore
Возможно, вам придется объяснить, что вы пытаетесь сделать немного лучше. ОО, дженерики и, возможно, рефлексия, вероятно, могут достичь того, что вы хотите сделать, но я действительно не понимаю, что это такое.
Brian J Hoskins
Большое спасибо за ответ F-ES Sitecore. Я попытался улучшить свой вопрос. Я изучу дженерики и рефлексию, чтобы увидеть, дает ли кто-либо из них мне другие идеи о том, как решить эту проблему.
F-ES Sitecore
Смотрите мое решение.
Brian J Hoskins
Это идеальное решение, и именно то, что я имел в виду.
но... где я могу узнать больше о технике, которую вы использовали здесь?
F-ES Sitecore
Трудно ответить на этот вопрос, вы просто подбираете вещи здесь и там на самом деле. Единственный сложный бит-это загрузка сборок, итерация типов, их создание и т. д., И, как я уже намекал, это называется "отражение", поэтому, если вы загуглите "отражение c#", вы узнаете, как обнаруживать и манипулировать типами во время выполнения (вы можете узнать, какие свойства и методы у чего-то есть, вы можете вызывать методы и т. д. Остальное - это просто базовые принципы ОО о базовых классах и производных классах.