У меня есть базовый класс C #, с которым я должен был связывать информацию для каждого типа (а не для каждого экземпляра). По сути, я хочу, чтобы все дочерние классы представляли Icon и FriendlyName, представляющие тип. Я бы хотел , а не , чтобы создать экземпляр типа, чтобы получить эту информацию, и я хочу требовать, чтобы все дочерние классы предоставляли эту информацию. В идеале это должно быть в интерфейсе, из которого получена база.
Я пытался использовать класс Attribute, но для него требуется постоянное значение, поэтому, хотя я могу установить FriendlyName, я не могу установить Icon и не могу найти способ сделать атрибут Attribute обязательным, так что дочерние классы могут остаться без него (до времени выполнения).
Я добавил к базе статическое свойство, которое дети могут скрывать, но это уродливо, а значения из базы действительно бессмысленны. Он не может знать, как зовут ребенка. Я мог бы сделать базовый бросок в Собственности, но, опять же, его не поймают до времени выполнения.
У кого-нибудь есть идеи, как мне реализовать что-то подобное? Есть шаблон, который я пропускаю? Любое нестандартное мышление также приветствуется.
Редактировать: На самом деле мне нужна возможность требовать атрибуты класса вдоль дерева наследования и иметь возможность использовать встроенный ресурс для установки этих атрибутов. Вся информация, которая будет возвращена, действительно статична и известна при компиляции. Я просто не могу придумать, как красиво это разоблачить.
Редактировать 2: Вот более конкретный пример того, что мне нужно:
Предположим, у меня есть базовый класс:
abstract class Vehicle { ... }
У меня тогда двое детей:
class Car : Vehicle { ... }
class Truck : Vehicle { ... }
Я хотел бы иметь возможность получить значок, представляющий «Автомобиль» или «Грузовик», без необходимости создания экземпляра одного (а-ля Car.Icon), поскольку все транспортные средства данного типа будут иметь все тот же значок.
Я также хочу убедиться, что все Типы, полученные из транспортных средств, предоставляют такой же значок для получения этой иконки, если кто-то придет в будущем и добавит новый класс
class Airplane : Vehicle { ... }
Редактировать 3: Зачем мне это нужно? Ну, у нас есть приложение, которое может принимать плагины. Плагин определяется типом, и когда тип загружается, мы показываем пользователю значок и имя. Когда они щелкают по значку, он создает экземпляр этого типа (и дает им диалоговое окно для именования экземпляра и т. Д.). Мне не нужно или не нужно создавать экземпляр типа, чтобы получить значок.