C#覆盖DefaultValue属性?

时间:2012-03-28 15:03:53

标签: c# user-controls override

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

比如说,你想要一个继承的属性,它具有“可浏览(true)”属性,但对于你的控件,你需要“可浏览(假)”。你是否必须覆盖属性本身,或者你可以使用TypeDescriptor做什么吗?

如果属性不是虚拟的,则无法覆盖,并且虽然可以使用“new”,但是您无法通过引用基类(如“Control”)来访问该属性。

即。在文本框控件上更改ScrollBars默认值的简单示例。

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;

谢谢, 罗斯

1 个答案:

答案 0 :(得分:0)

不,如果没有覆盖,你就无法做到。如果财产不是虚拟的 - 你就注定了。