2011-07-16 129 views
0

我想知道如果有一種方法可以隱藏子類在C#中,像這樣的情況下繼承屬性:隱藏類/接口的繼​​承屬性?

public interface ISupplierLogin : ISupplier 
{ 
    [Obsolete] 
    new string BusinessName { get; set; } 

    [Obsolete] 
    new long ABN { get; set; } 

    [Obsolete] 
    new DateTime DateRegistered { get; set; } 
} 

public interface ISupplier 
{ 
    bool TradeOnly { get; set; } 

    [Required] 
    [DisplayName("Business Name")] 
    [StringLength(25, ErrorMessage = "The maximum length of business name is 25 characters.")] 
    [DataType(DataType.Text)] 
    string BusinessName { get; set; } 

    [Required] 
    [DisplayName("Australian Business Number")] 
    [ABNValidator(ErrorMessage="The ABN you entered does not appear to be valid.")] 
    long ABN { get; set; } 

    [Required] 
    [RegularExpression("^[a-zA-Z0-9]+$", ErrorMessage="The username you entered does not appear to be valid. (a-z & 0-9)")] 
    [StringLength(25, ErrorMessage = "The maximum length of username is 25 characters")] 
    [DataType(DataType.Text)] 
    string Username { get; set; } 

    [Required] 
    [StringLength(12, ErrorMessage = "The maximum length of password must be between 8 and 12 characters long.")] 
    [DataType(DataType.Password)] 
    string Password { get; set; } 

    [DisplayName("Date Registered")] 
    DateTime DateRegistered { get; set; } 
} 

,我想繼承我的視圖模型我的驗證屬性,但只有兩個屬性。

無論如何要實現我想做的事情嗎?

謝謝。

+0

您可以使基本成員虛擬,然後用'[EditorBrowsable(EditorBrowsableState.Never)]覆蓋它' –

回答

3

你曲解繼承的想法:基本上,當你有兩個類ABBA的exension,B繼承A所有非私人內容;這是沒有什麼不同,如果你使用的interace和一類,兩個接口等

因此,在我看來,你應該只使用繼承如果實現各個領域,否則你有種打敗的目的繼承,你沒有遵循面向對象的原則。

能做什麼但是(不是最好的選擇,但它是可能的)是使用:

thow new NotImplementedException(); 

本作展現給最終的程序員,他/她不能使用這個屬性,他或她的應用程序將在調試階段拋出異常。

同樣,您可以使用[Obsolete(..., true)],這會使編譯器在編譯時引發錯誤; 注意第二個參數設置爲true,您可以使用[Browsable(false)]將其隱藏在智能感知,但這仍然允許使用此屬性。


您可以將其添加到屬性,這將有效地禁用您的財產的大多數用法。它將而不是實際上隱藏它的意義,但它確實顯示開發人員忽略它。

[Bindable(false)] 
[Browsable(false)] 
[EditorBrowsable(EditorBrowsableState.Never)] 
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 

就實際隱藏它而言,我不認爲有這種可能性。

+0

是的,這是繼承的概念,但是我試圖隱藏反射的屬性,以避免錯誤時模型綁定。所以我真的要問,在這種情況下如何實現某種「繼承」,但是隱藏屬性而不是添加它們。 –

+0

那麼這就是繼承的全部問題,沒有'隱藏'屬性,只是擴展,但讓我編輯答案與我在互聯網前不久發現的東西。 – KilZone