2011-07-16 8 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; } 
} 

、2つだけのためにプロパティ。

私はきちんとしていることを達成するためにとにかくありますか?

ありがとうございました。

+0

基本メンバーを仮想にしてから、[EditorBrowsable(EditorBrowsableState.Never)]でオーバーライドすることができます。 –

答えて

3

あなたは相続のアイデアを誤って解釈している:あなたは二つのクラスABを持っている基本的にいつ、BAのexensionで、BAすべての非プライベートの要素を継承します。これは、あなたがinteraceとクラス、二つのインターフェースを使用していた場合など、

違いはありませんあなたが他のすべてのフィールドを、実装している場合ので、私の意見では、あなたがだけあなたが一種のの目的を敗北継承を使用する必要があります継承し、あなたはオブジェクト指向の原則に従わない。

使用することであるあなたはしかしを行うことができます(ない最良の選択肢が、それは可能です)何:

thow new NotImplementedException(); 

彼/彼女は、このプロパティを使用することはできませんエンドプログラマにこのメイクショー、など彼または彼女のアプリケーションはデバッグ段階で例外をスローします。

同様に[Obsolete(..., true)]を使用すると、コンパイル時にエラーがスローされます。 第2パラメータはtrueに設定されています。 また、を使用すると、[Browsable(false)]をIntelliSenseで非表示にできますが、これでも引き続きこのプロパティを使用できます。


プロパティにこれを追加すると、プロパティのほとんどの使用を効果的に無効にできます。 ではなく、は実際にあなたが望む意味でそれを隠しますが、それを無視する開発者を示しています。

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

実際に隠れている限り、私はそこに可能性はないと思います。

+0

これは継承の概念ですが、リフレクションからプロパティを隠そうとしています。モデル結合。だから私は本当にこのような状況で継承のようなものを達成する方法を尋ねていますが、プロパティを追加する代わりにプロパティを隠しているところです。 –

+0

これは継承の問題点です。プロパティを隠しているだけで拡張はできませんが、インターネットで見つかったものを少し前に編集することができます。 – KilZone

関連する問題