簡體   English   中英

擴展ASP.NET WebControls:如何有效隱藏公共屬性

[英]Extending ASP.NET WebControls: How to effectively hide public properties

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

只需覆蓋它並提供日期的字符串版本即可。 每當您從基類繼承時,嘗試像這樣更改現有接口通常是個壞主意……這違背了所有面向對象的實踐:-P

您可以使用EditorBrowsable屬性。 它只會對Intelisense隱藏該屬性,而不會破壞與基類的編譯時兼容性。

盡管您仍然可以使用屬性(如果知道名稱)。

PS:請閱讀本文結尾處的用戶評論。 http://msdn.microsoft.com/zh-CN/library/system.componentmodel.editorbrowsableattribute.aspx

如果要創建一個繼承另一個類的類,則父方法的所有屬性都應該仍然相關。 在這種情況下,您可以返回獲取日期的文本表示形式,並解析集合的文本表示形式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM