Это похоже на ситуацию с несколькими решениями.
Один из способов сделать это - настроить UserControl для вызова виртуального метода в базовом классе, а затем переопределить его в производных классах.В производных классах вы могли бы просто вызвать базовую реализацию для первоначальной настройки фрейма.
Вы также можете настроить его для рендеринга в слоях (слой контейнера, слой сферы, слой линии и т. Д.),и пусть дочерний класс отображает любые уникальные слои и определяет порядок.Это может быть дорого, но это может сгладить визуальные эффекты, если большая часть изображения останется прежней.
Другой способ - использовать делегатов, а не наследование, но это может привести к путанице.Как правило, это не очень хорошая идея из-за снижения производительности.Тем не менее, он имеет преимущество гибкости во время выполнения.В зависимости от остальной части вашего кода, вы можете переключаться между стилями роста в середине этой модели.Если вы не видите в себе преимущества этой гибкости, я бы порекомендовал вам использовать другую модель.
Независимо от того, какой метод вы используете, я бы порекомендовал базовому классу предоставить общие процедуры рисования дляобеспечить последовательность.Подпрограммы в базовом классе должны использоваться большинством дочерних классов, но не обязательно всеми.Это обычно приводит к более управляемому коду (если вы не получите файл с 10000 строками), меньше ошибок и меньше усилий.