Расширение ASP.NET WebControls: как эффективно скрывать публичные свойства - PullRequest
1 голос
/ 06 октября 2009

Я расширяю 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 от его parrent.

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

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

Ответы [ 3 ]

4 голосов
/ 06 октября 2009

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

2 голосов
/ 06 октября 2009

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

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

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

1 голос
/ 06 октября 2009

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

...