[英]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 的想法:基本上當您有兩個類A
和B
並且B
是A
的擴展時, 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)]
就實際隱藏它而言,我認為這是不可能的。
我相信這個前面的問題會給你你所尋求的答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.