我正在扩展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();
}
}
}
鉴于此控件只应与日期一起使用,因此没有理由从它的parrent继承Text
属性。
有没有办法隐藏它?..除了实现NotImplementedException
之外,还是这样:
new public String Text
{
get { throw new NotImplementedException(); }
set { throw new NotImplementedException(); }
}
答案 0 :(得分:4)
只需覆盖它并提供日期的字符串版本。无论何时从基类继承,尝试更改现有界面通常都是一个坏主意......它违背了所有面向对象的实践:-P
答案 1 :(得分:2)
您可以使用EditorBrowsable属性。它只会隐藏Intelisense中的属性,但不会破坏与基类的编译时兼容性。
虽然你知道它的名字,你仍然可以使用该属性。
PS:阅读本文末尾的用户评论。 http://msdn.microsoft.com/en-us/library/system.componentmodel.editorbrowsableattribute.aspx
答案 2 :(得分:1)
如果要创建继承另一个类的类,则父方法的所有属性仍应相关。在这种情况下,您可以返回get的日期的文本表示,并解析该集的文本表示。