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;
おかげで、 ロス