2009-10-06 1 views
1

Я простирающиеся TextBox WebControl работать как своего рода «DateTextBox», который выставляет его значение как свойство (DateValue) в коде-за:Расширение ASP.NET WebControls: Как эффективно скрыть общие свойства

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(); } 
} 

ответ

2

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

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

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

+0

Скрывает ли это свойства от Intellisense в представлении кода? – roosteronacid

+0

Пока класс, определенный в разных сборках, вы не должны видеть свойство в Intellisense. Но вы можете легко протестировать его. –

4

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

+0

+1 Я бы сделал то же самое (и я реализую его таким образом) – Arthur

1

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