2012-03-28 107 views
1

是否有可能在C#用户控件中覆盖应用于属性的属性,而不必覆盖该属性?例如,您想要一个属性,该继承的属性具有“Browsable(true)”属性,但对于您的控件而言,您希望“Browsable(false)”。你是否必须重写属性本身,或者你可以用TypeDescriptor做些什么?C#覆盖DefaultValue属性?

如果该属性不是虚拟的,覆盖是不可能的,并且在使用“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; 

感谢, 罗斯

回答

0

不,你不能没有覆盖去做。如果房产不是虚拟的 - 你注定要失败。