Это не то, как работают общие ограничения сбора.
Generic constraints ограничить, какие типы являются законными для создания экземпляра родового типа. Существует несколько различных ограничений, но общие ограничивают общий параметр либо наследовать, либо быть экземпляром данного типа, либо быть типом, реализующим конкретный интерфейс (или набор интерфейсов).
Type
, с другой стороны, является классом, который описывает информацию о типе в приложении или в одной из его библиотек. Конкретные виды типов не наследуют или не расширяются Type
- скорее, существует отдельный экземпляр из Type
для каждого типа. Вы не можете использовать общие ограничения для контроля того, какие экземпляры Type
могут быть добавлены в вашу коллекцию.
Без дополнительной информации о том, как вы хотите «ограничить» информацию в коллекции, трудно сказать, какой маршрут вы должны предпринять. Например, если все, что вы хотите сделать, это убедиться, что хранятся только уникальные типы (без дубликатов), которые могут быть достигнуты с помощью HashSet (а не списка). Но если вам нужно что-то более специализированное - например, ограничение экземпляров Type
, которые могут быть добавлены к некоторому подмножеству типов, тогда вам, скорее всего, понадобится реализовать свою собственную коллекцию и реализовать логику gaurd в методах «Добавить/Вставить».
Спасибо! Я думаю, что фабричная модель может работать. –
@ Jon, как fyi, вы также можете исследовать инверсию управления [IoC] и инжекцию зависимостей [DI]. причудливые имена для относительно простых понятий, и уже существует несколько «зрелых» фреймворков, которые реализуют обобщенные заводские шаблоны, как описано выше. например, Unity 2.0 MS, а также Castle Castle Windsor Container. –
Большое спасибо! Оказывается, единство было именно тем, что мне нужно. Я использую его для регистрации типов и для создания новых объектов, отслеживая зарегистрированные типы в списке. Отлично! –