Прежде всего, я бы объединил эти функции в единую форму, как это было предложено Каджем. Эта функция используется для управления списком объектов Компании. Это разумная степень детализации для типичного пользователя - администрировать, то есть добавлять или редактировать Компанию из одной формы.
Во-вторых, с точки зрения проблемы множественного наследования, вы говорите, что вам нужно две формы: Добавить, Изменить. Хорошо, я не согласен, но давайте все равно пойдем с этим.
Вы говорите: «Но у них много общего (поля, кнопки и т. Д.), Поэтому я обобщаю класс Form». Я ставлю под сомнение основание для обобщения здесь. Много полей и кнопок общего? Какие поля и кнопки, например, имеют общие формы DocumentEdit и CompanyEdit? Кнопка Изменить, что-нибудь еще?
Теперь, CompanyAdd и CompanyEdit, да, у них будет много общего. Это предполагает, что формы добавления и редактирования расширяют некоторую родительскую форму вместо этих абстрактных оснований добавления / редактирования. Просто избавьтесь от BaseFormAdd и BaseFormEdit. Какую общую функциональность вы действительно собираетесь иметь между примером, формой документа и формой компании? Похоже, что общая базовая форма «Добавить» или «Редактировать» добавляет мало пользы. Вы можете обойтись без этой линии наследования. С точки зрения множественного наследования, я сталкиваюсь только с ситуацией, в которой это было бы полезно, до такой степени, что я чувствую, что она действительно нужна мне очень редко