2012-03-28 19 views
1

C#ユーザーコントロールで、プロパティをオーバーライドすることなくプロパティに適用された属性をオーバーライドすることは可能ですか?C#DefaultValue属性をオーバーライドしますか?

たとえば、継承されている「Browsable(true)」属性を持つプロパティが必要ですが、コントロールでは「Browsable(false)」が必要です。プロパティ自体をオーバーライドする必要がありますか、おそらくTypeDescriptorで何かできますか?

プロパティが仮想でない場合、オーバーライドは不可能で、 "new"を使用することは可能ですが、基本クラス(「コントロール」など)への参照でプロパティにアクセスすることはできません。

ie。テキストボックスコントロールのスクロールバーのデフォルトを変更する簡単な例。

public partial class MyTextBox : TextBox 
{ 
    public MyTextBox() 
    { 
    this.ScrollBars = ScrollBars.Vertical; 
    } 

    [DefaultValue(typeof(ScrollBars),"Vertical")] 
    public ScrollBars ScrollBars 
    { 
    get { return base.ScrollBars; } 
    set { base.ScrollBars = value; } 
    } 
} 

// this doesn't go via property setter as not overridden 
TextBox textbox = new MyTextBox(); 
textbox.ScrollBars = ScrollBars.None; 

おかげで、 ロス

答えて

0

はありません、あなたは上書きせずにそれを行うことはできません。プロパティが仮想でない場合 - あなたは運命づけられています。

関連する問題