Хороший способ гарантировать, что свойство на UserControl будет установлено? - PullRequest
1 голос
/ 11 августа 2010

Если наш UserControl требует, чтобы определенные свойства были установлены для его полезности, каков наилучший способ убедиться, что они установлены?Даже если это просто примечание к себе и / или близким коллегам.

Мы пытались использовать метод Initialize, но это уже нас поймало, потому что мы забыли обновить Initialize в одном случае, слегка изменивdesign.

Другая идея состоит в том, чтобы использовать разумное значение по умолчанию, так что если мы забудем установить его, тогда будет что-то полезное.Но в этом случае нет полезного значения по умолчанию.Я действительно хочу сильную ноту для себя , чтобы напомнить мне, что здесь есть что-то, что нужно устанавливать каждый раз, когда я создаю экземпляр элемента управления.

Ответы [ 2 ]

3 голосов
/ 11 августа 2010

Ничего нельзя применить на уровне дизайнера, нет триггера "Я закончил проектирование".Но, безусловно, во время выполнения, просто сгенерируйте исключение в самый ранний момент:

protected override void OnCreateControl(EventArgs e) {
    if (!DesignMode && !mumbleAssigned) 
        throw new InvalidOperationException("Oops, Mumble property wasn't set");
    base.OnCreateControl(e);
}

Вы можете сделать это более тонким, если реализуете метод OnPaint ().И просто e.Graphics.DrawText напоминание.Вызовите Invalidate () в установщике свойств.Это работает во время разработки.

2 голосов
/ 11 августа 2010

Ничего крика не должно быть реализовано как исключение. Если есть свойство, которое имеет критическое значение, я всегда просто должен знать о нем, когда дело касается выполнения кода:

public object ImportantProperty 
{
    get
    {
        if (!this.DesignMode && _superImportantProperty == null)
        {
            throw new Exception("The property ImportantProperty must be set.");
        }
    }
}

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

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