C#覆盖DefaultValue属性

本文关键字:属性 DefaultValue 覆盖 | 更新日期: 2023-09-27 18:29:21

在C#用户控件中,是否可以重写应用于属性的属性,而不必重写该属性?

例如,您想要一个继承时具有"Browseable(true)"属性的属性,但对于您的控件,您想要"Browseble(false)"。是否必须重写属性本身,或者是否可以对TypeDescriptor执行某些操作?

如果该属性不是虚拟的,则不可能重写,并且可以使用"new",则无法通过引用基类(如"Control")来访问该属性。

即。更改文本框控件上滚动条默认值的简单示例。

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;

谢谢,Ross

C#覆盖DefaultValue属性

不,如果不重写,就无法执行此操作。如果房产不是虚拟的,你就注定要失败。