1

我将 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从其父级继承该属性。

有什么办法可以隐藏它吗?.. 除了实现 a NotImplementedException,像这样:

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

3 回答 3

4

只需覆盖它并提供日期的字符串版本。每当您从基类继承时,尝试像这样更改现有接口通常是一个坏主意……它违背了所有面向对象的做法:-P

于 2009-10-06T13:00:55.687 回答
2

您可以使用 EditorBrowsable 属性。它只会对 Intelisense 隐藏属性,但不会破坏与基类的编译时兼容性。

尽管如果您知道它的名称,您仍然可以使用该属性。

PS:阅读本文末尾的用户评论。 http://msdn.microsoft.com/en-us/library/system.componentmodel.editorbrowsableattribute.aspx

于 2009-10-06T13:33:58.723 回答
1

如果您正在创建一个继承另一个类的类,则父方法的所有属性应该仍然相关。在这种情况下,您可以返回获取日期的文本表示,并解析集合的文本表示。

于 2009-10-06T13:02:21.137 回答