Перенаправление свойств в дочерние свойства

#c# #.net-5

Вопрос:

У меня есть много объектов одного и того же типа (базовый тип-DisplayTool) в списке. Тип не определяется во время компиляции, но может быть любым типом, добавленным с помощью системы плагинов.

Предположим, у меня есть свойство isActive, которое в настоящее время мне нужно просмотреть все свойства в списке и установить значение. Дополнительно может быть установлено одно значение одного объекта.

В настоящее время мне нужно сделать это для каждого свойства, но я не знаю их заранее, поэтому я думал о каком-то объекте-оболочке, который объединяет прикрепленные объекты в список и динамически создает свойства. В этом случае был бы полезен объект ExpandoObject, но он не объединяет свойства в одно целое.

Инспектор свойств WinForms — хороший пример нужного мне поведения. Если свойства свойства всех присоединенных объектов одинаковы, отображается значение, если не все значения одинаковы, оно не отображается.

Я создал свой собственный макет объекта, производный от ExpandoObject, который собирает свойства и отображает их. Я только хотел спросить, есть ли уже реализация из фреймворка, которая делает то же самое?

Комментарии:

1. Если количество свойств не слишком велико (например, десятки), я бы вместо этого определил некоторые интерфейсы, например IActivable , которые предоставляют свойство IsActive { get; set; } . Таким образом, вы можете отливать и сопоставлять тип и делать все типобезопасно. Я называю это «разумным путем».

2. @RodrigoRodrigues. Это был бы вариант, но моя проблема в том, что я знаю только базовый интерфейс с несколькими свойствами (~5). Остальное происходит из разных реализаций, о которых основное приложение ничего не знает. Я также отредактировал свой вопрос, который у меня уже есть.

3. Какие операции вы планируете выполнять с теми объектами, о свойствах которых вы не знаете?

4. Чтобы было короче. У нас есть базовая структура, которая может выполнять манипуляции с изображениями. Каждый пользователь может создать свой собственный модуль взаимодействия с индивидуальными свойствами, которые не предоставляются самой платформой. Например, один модуль может создавать только линии, но другой модуль может создавать определенную сегментацию изображений. Каждый из них имеет отдельные (возможно, не перекрывающиеся) свойства. Существуют различные дисплеи с отдельными модулями взаимодействия . Если, например, я хочу переключить свойство (например, радиус) Я хочу объединить эту операцию в одну, чтобы мне не нужно было просматривать каждый дисплей.