Создание производного элемента управления - PullRequest
1 голос
/ 31 октября 2008

У меня есть абстрактный базовый класс, который наследуется от UserControl и который затем используется для получения ряда классов.

Проблема, с которой я столкнулся, заключается в том, чтобы элегантно убедиться, что сгенерированная функция InitializeComponent() вызывается для каждого слоя класса.

Таким образом, (абстрактный) базовый класс имеет ряд элементов управления, которые будут общими для всех детей. При создании экземпляра дочернего класса сначала вызывается базовый конструктор, но есть ли способ элегантно вызвать производный InitializeComponent() без необходимости эффективно создавать один и тот же конструктор для каждого производного класса

public DerivedClass() { 
  InitializeComponent();
}

Мне интересно, есть ли более эффективный способ, чем повторяться в каждом классе Derived?

В сущности, я бы хотел, чтобы (абстрактный) базовый класс мог вызывать

Derived.InitializeComponent(); 

В конце концов, когда он находится в базовом конструкторе (в отладке), он знает, что это производный экземпляр ...

Ответы [ 2 ]

1 голос
/ 31 октября 2008

публичный DerivedClass (): base () {}

Это вызовет ваш базовый конструктор, обычно не существует волшебного способа сделать что-то, если вам нужно вызвать InitializeComponents, вам, вероятно, придется вызвать его самостоятельно.

0 голосов
/ 31 октября 2008

если вы сделаете InitializeComponent виртуальным и переопределите его для всех подклассов, базовый класс вызовет правильный метод для каждого из подклассов, если вы вызовете базовый конструктор из производного конструктора.

...