Расширение ASP.NET WebControls: как эффективно скрыть общедоступные свойства

Я расширяю TextBox WebControl, чтобы он работал как своего рода «DateTextBox», который выставляет свое значение как свойство (DateValue) в коде программной части:

public sealed class DateTextBox : TextBox
{
    public DateTime ?DateValue
    {
        /* ToDateFromUserInterface() and ToUserInterfaceString() are both
           extension methods */

        get
        {
            return
            (
                String.IsNullOrEmpty(Text) ?
                new DateTime?() :
                Text.ToDateFromUserInterface()
            );
        }

        set
        {
            if (value != null) Text = ((DateTime)value).ToUserInterfaceString();
        }
    }
}

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

Есть ли способ скрыть это?.. Кроме реализации NotImplementedException, например:

new public String Text
{
    get { throw new NotImplementedException(); }
    set { throw new NotImplementedException(); }
}

person cllpse    schedule 06.10.2009    source источник


Ответы (3)


Вы можете использовать атрибут EditorBrowsable. Это только скроет свойство от Intelisense, но не нарушит совместимость времени компиляции с базовым классом.

Хотя вы все равно можете использовать это свойство, если знаете его имя.

PS: читайте комментарии пользователей в конце этой статьи. http://msdn.microsoft.com/en-us/library/system.componentmodel.editorbrowsableattribute.aspx

person Alex Reitbort    schedule 06.10.2009
comment
Скрывает ли это свойства Intellisense в представлении кода программной части? - person cllpse; 06.10.2009
comment
Пока класс определен в другой сборке, вы не должны видеть свойство в Intellisense. Но вы можете легко проверить это. - person Alex Reitbort; 07.10.2009

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

person Joel Martinez    schedule 06.10.2009

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

person Karmic Coder    schedule 06.10.2009