В нашей программе мы имеем следующую иерархию классов:
public class PagePanelBase: UserControl
public sealed class CameraParameters: PagePanelBase
CameraParameters переопределяет свойство BackColor, устанавливая цвет фона некоторых компонентов, которые в нем содержатся. Если BackColor установлен из конструктора PagePanelBase (оттуда вызывается InitializeComponent), конструктор CameraParameters еще не был вызван, поэтому мы получаем разыменование нулевого указателя - стандартная проблема «не вызывать виртуальные методы из конструктора».
Теперь, как мы можем решить эту проблему? Нам нужно использовать эту иерархию, и нам нужно установить цвет фона из базового класса. В настоящее время каждый производный класс использует логическую переменную «isInitialized», которая установлена в InitializeComponent, и каждый переопределенный метод вызывает InitializeComponent, если необходимо, прежде чем что-либо делать. Есть ли лучший способ сделать это? В коде уже достаточно разбитых окон ...