C #: вызов виртуального метода из конструктора; совет? - PullRequest
1 голос
/ 19 ноября 2009

В нашей программе мы имеем следующую иерархию классов:

public class PagePanelBase: UserControl
public sealed class CameraParameters: PagePanelBase

CameraParameters переопределяет свойство BackColor, устанавливая цвет фона некоторых компонентов, которые в нем содержатся. Если BackColor установлен из конструктора PagePanelBase (оттуда вызывается InitializeComponent), конструктор CameraParameters еще не был вызван, поэтому мы получаем разыменование нулевого указателя - стандартная проблема «не вызывать виртуальные методы из конструктора».

Теперь, как мы можем решить эту проблему? Нам нужно использовать эту иерархию, и нам нужно установить цвет фона из базового класса. В настоящее время каждый производный класс использует логическую переменную «isInitialized», которая установлена ​​в InitializeComponent, и каждый переопределенный метод вызывает InitializeComponent, если необходимо, прежде чем что-либо делать. Есть ли лучший способ сделать это? В коде уже достаточно разбитых окон ...

Ответы [ 2 ]

2 голосов
/ 19 ноября 2009

Можете ли вы установить цвет фона в обработчике событий, например OnLoad?

0 голосов
/ 19 ноября 2009

Вы пробовали абстрактный метод, а не виртуальный? К сожалению, это не работает в вашей общей иерархии, но это стоит учитывать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...