代码之家  ›  专栏  ›  技术社区  ›  cllpse

扩展ASP.NET WebControls:如何有效隐藏公共属性

  •  1
  • cllpse  · 技术社区  · 15 年前

    我正在扩展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(); }
    }
    
    3 回复  |  直到 15 年前
        1
  •  2
  •   Alex Reitbort    15 年前

    可以使用editorbrowable属性。它将只隐藏Intelisen的属性,但不会破坏与基类的编译时兼容性。

    不过,如果知道属性的名称,您仍然可以使用它。

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

        2
  •  4
  •   Joel Martinez    15 年前

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

        3
  •  1
  •   Karmic Coder    15 年前

    如果要创建继承另一个类的类,则父方法的所有属性都应该是相关的。在这种情况下,可以返回get日期的文本表示形式,并解析集合的文本表示形式。

    推荐文章