2012-06-11 4 views
4

У меня есть класс LegacyClass, который наследует OldBaseClass.Наследует новый базовый класс (который наследует старый базовый класс) с изменением?

Я рассматриваю изменения, чтобы ввести новый класс между так что

LegacyClass наследует NewBaseClass И NewBaseClass наследует OldBaseClass.

Ни NewBaseClass, ни OldBaseClass не являются абстрактными. Будет ли это изменяться совместимость сборок сборки для старых сборщиков MSIL, которые зависят от (и, возможно, даже наследуют) LegacyClass?

+3

Самый простой способ узнать, попробовать ли это, нет? Если ваш проект огромен, то, возможно, создайте новый крошечный проект только для тестирования этого. –

+0

Тестирование может доказать, что оно не работает, но не работает, например. может ли это зависеть от того, существуют ли виртуальные методы для каждого класса? Может ли это зависеть от того, какая функциональность используется в классе? Я хотел бы узнать самый общий и подробный ответ. :) –

+1

Возможный дубликат [Обратная совместимость при смене базового класса] (http://stackoverflow.com/questions/5321880/backwards-compatibility-when-changing-base-class) – jgauffin

ответ

3

Как указано в this answer, это должно быть нормально, если вы фактически не изменяете какое-либо существующее поведение (и, более конкретно, в зависимости от того, как это поведение изменяется). Если все, что делает новый класс, это добавить новые (отдельные) методы/свойства, то вы должны быть в порядке. Однако, как обычно бывает, это зависит. Рассмотрите следующие вопросы:

  • Кто использует вашу сборку (аутсайдеры или только те, кто входит в вашу организацию)?
  • Можете ли вы перекомпилировать клиентов?
  • Можете ли вы запускать автоматические или ручные модульные тесты для этих клиентов?
  • Вы хотите добавить или изменить функциональность своего LegacyClass?
Смежные вопросы