【问题标题】:C# Override DefaultValue attribute?C# 覆盖 DefaultValue 属性?
【发布时间】:2012-03-28 15:03:52
【问题描述】:

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

例如,假设您想要一个继承的属性,它具有“Browsable(true)”属性,但对于您的控件,您想要“Browsable(false)”。您是否必须覆盖属性本身,或者您可以使用 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;

谢谢, 罗斯

【问题讨论】:

    标签: c# user-controls overriding


    【解决方案1】:

    不,如果不覆盖,您将无法做到这一点。如果财产不是虚拟的 - 你注定要失败。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-19
      • 2011-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多