Атрибут DesignOnly не скрывает свойство во время выполнения - PullRequest
2 голосов
/ 17 января 2010

Я создаю собственный веб-элемент управления с общедоступным свойством, которое я хочу, чтобы оно было доступно только во время разработки (т.е. сделать его недоступным в коде позади). Атрибут DesignOnly обещает сделать именно это, но когда я устанавливаю [DesignOnly(true)], он не оказывает заметного эффекта:

[Bindable(true)]
[Category("Appearance")]
[DefaultValue(null)]
[Localizable(false)]
[DesignOnly(true)]
public string MyProp
{
    get
    {
        return ViewState["MyProp"] as string;
    }


    set
    {
        ViewState["MyProp"] = value;
    }
}

Свойство все еще появляется в коде за IntelliSense. Установка значения в коде работает . В этом отношении поведение такое же, как если бы атрибут никогда не был установлен. И я очистил и перестроил полное решение. Дважды.

Я делаю это неправильно? Можете ли вы сказать мне, каков правильный путь для этого, тогда?

Большое спасибо заранее.

1 Ответ

2 голосов
/ 17 января 2010

Атрибут DesignOnly обещает сделать именно это

На самом деле нет; он пытается прояснить это при доступе к нему в коде недоступен ; если вы лжете (то есть утверждаете, что что-то предназначено только для дизайна, когда оно доступно ), вы должны ожидать, что оно будет плохо себя вести. Компилятор знает, что доступно, и этот атрибут «только для дизайна» не определен в спецификации C #, поэтому он не имеет значения для компилятора, если вы добавите этот атрибут.

Попробуйте добавить:

[EditorBrowsable(EditorBrowsableState.Never)]

, на который смотрит редактор кода (IDE) (но только при использовании отдельной сборки) - обратите внимание, что это не мешает вам использовать его - он просто скрывает его.

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

...