Одно предложение: сделайте AssetDataInputControlBase как Canvas и поместите в него любой элемент управления, который вы хотите. Будучи холстом, он будет вести себя как контроль. Любые необходимые методы / свойства Control требуют добавления в ADICB методов, вызывающих методы Control. Если их много, эта идея не так хороша.
Еще одно предложение: ваши элементы управления могут реализовывать интерфейс, который имеет метод, который возвращает что-то вроде AssetDataInputControlBase, только в этом случае ADICB не будет реализовывать Control или что-то еще. Вместо этого он будет иметь только AssetID, AssetStructureField и DataField (и другие вещи, которые потребуются позже). Таким образом, ваши элементы управления (например, AssetDataStringControl) просто расширяют элемент управления (например, TextBox) и, кроме того, содержат ссылку на объект ADICB.
Это предполагает, что значения ADICB довольно независимы от элемента управления (скажем, TextBox). Если для метода get из StructureField требуются все виды информации из TextBox, и нужно получать ее по-разному, если вместо этого используется ListBox, все будет запутано, и вам нужно лучшее решение. Если не , ваши элементы управления - это просто расширения TextBox, ListBox и т. Д. С одной добавленной ссылкой на объект ADICB. Один класс ADICB, какой бы сложный он ни был написан, может использоваться всеми вашими элементами управления.
Это выглядит как хороший аргумент для множественного наследования.