簡體   English   中英

隱藏類/接口上的繼承屬性?

[英]Hide inherited properties on a class/interface?

我想知道是否有辦法隱藏 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; }
}

我想在我的視圖 model 中繼承我的驗證屬性,但僅適用於兩個屬性。

有沒有辦法實現我想做的事情?

謝謝。

您誤解了 inheritance 的想法:基本上當您有兩個類AB並且BA的擴展時, B繼承A的所有非私有元素; 如果您使用一個接口和一個 class、兩個接口等,這沒有什么不同。

因此,在我看來,如果你實現所有字段,你應該只使用inheritance ,否則你有點違背 inheritance 的目的,你沒有遵循 object 導向原則。

但是,您可以做的(不是最好的選擇,但有可能)是使用:

thow new NotImplementedException();

這向最終程序員表明他/她不能使用此屬性,因為他或她的應用程序將在調試階段拋出異常。

同樣,您可以使用[Obsolete(..., true)] ,這將使編譯器在編譯時拋出錯誤; 注意第二個參數設置為true 此外,您可以使用[Browsable(false)]將其隱藏在 IntelliSense 中,但這仍然允許使用此屬性。


您可以將其添加到屬性中,這將有效地禁用您的屬性的大多數用途。 它實際上不會以您想要的方式隱藏它,但它確實顯示開發人員忽略它。

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

就實際隱藏它而言,我認為這是不可能的。

我相信這個前面的問題會給你你所尋求的答案。

如何在不修改繼承的 class(基類)的情況下隱藏 class 中的繼承屬性?

暫無
暫無

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

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