Хотя существуют различные инструменты рефакторинга, я сомневаюсь, что ваш вопрос имеет практическое применение, поскольку для выполнения такого рода автоматических манипуляций потребуются существенные контекстные знания и вмешательство человека.
В вашем примере это не простоДостаточно того, что A и B получают методы и свойства C, но тот факт, что во многих случаях есть места, где вы хотите передать A (или B) методу и рассматривать его как C. Или, вы можете захотеть передатьэто что-то, что принимает C, но вызывает специфическое поведение A (или B) - представьте коллекцию, которая вызывает .DoThing () для любого объекта внутри него.
Вы не должнытолько разбивают классы, но имеют все виды перегруженных функций с большим количеством избыточно выглядящего кода (особенно для типов, а не только для поведения).
Я бы сказал, что во время интересного мысленного эксперимента, возможно, мыследует поместить его в кучу плохих идей.Я сомневаюсь, что это поможет улучшить читабельность, расширяемость или производительность.