您的位置:首页 > 其它

How To: 屏蔽组件 Design-time 显示的属性以及方法

2005-07-06 12:04 411 查看
所谓屏蔽组件 design-time 显示的属性以及方法,是指把组件的某些属性甚至方法对.Net Studio IDE 的 design-time 支持给屏蔽掉。使得从用户的 IDE 看来,该组件是好像并非存在这个属性,或者方法。 但事实上,这个属性或者方法是的确存在于组件中的,只是出于设计上的考虑,我们把它给屏蔽掉了。

这里所谓的屏蔽原因一般而言,有以下一些:
1) 屏蔽祖先类中不需要的属性。
通常编写组件,我们一般都会从 usecontrol 类, 或者webcontrol 类通过继承创建,甚至很多的情况下是继承类库中处于下游的组件类,button, textbox 等已有的工具类。 祖先已有的属性和方法被继承下来,从而减少了大量重复的编码。 选择一个好的祖先类,我们就获得了一个很好的起点。
However, the sword always has two blades. 在从祖先类中获得了我们想要获得属性和方法外,继承也强迫我们接受了某些我们不想要的祖先类的方法和属性。 而且如果这些属性会对用户使用有负作用的暗示或者影响,或者和我们的一些自定义属性有语义冲突,我们就必须考虑把它们屏蔽掉。

2) 一些过时的属性或者方法。
例如,由于向下兼容的需要,我们不能把某些过时的属性或者方法去掉,所以把它屏蔽掉,让用户使用新的属性或者方法作为替代。

3) 一些属性不适合于显示在设计时的IDE 属性窗口。

在编写 .Net Component 的时候,如何添加 design-time 的多语言支持呢? 下面我们分别对以上的几种情况分别作阐述。
首先是如何屏蔽基类的公用属性或者方法。大概有两种途径可以做到:
1) 重载父类的属性,然后使用EditorBrowsable以及Browsable属性标记:
例如,为了屏蔽基类的BackgroundImage属性,我们可以首先在子类中重载,然后为子类的BackgroundImage添加EditorBrowsable以及Browsable属性标记。

[EditorBrowsable(EditorBrowsableState.Never), Browsable(false)]
public override Image BackgroundImage

EditorBrowsable(EditorBrowsableState.Never), 指示隐藏显示在智能编辑提示功能intelliSense;Browsable(false),指示隐藏显示在IDE控件属性页面。

另外的一些情况,例如隐藏一些设计时不可见的属性,Browsable(false)也经常会被独立使用。

2) 为控件编写一个designer, 在designer里面的PostFilterProperties方法中过滤掉不想要的属性。

[Designer(typeof (MyDesigner))]
public sealed class MyControl: System.Web.UI.WebControls.WebControl {}

public class MyDesigner:System.Web.UI.Design.ControlDesigner
{
public MyDesigner()
{}

protected override void PostFilterProperties( IDictionary Properties )
{
Properties.Remove( "BackgroundImage" );
}

}

最后使用Obsolete属性标记,标识过时的属性或者方法。为了向下兼容的考虑,对一些过时的属性和方法,我们不能够直接从控件中删除,尤其是一个广为发布的控件。那么怎么告诉用户这些方法是过时的呢?我们可以在控件中使用Obsolete属性标记。
例如:

public class MyControl:System.Web.UI.WebControls.WebControl
{
[Obsolete("NewItemStyle property instead.")]
public TableItemStyle ItemStyle
{
get {}
set {}
}
}

用户如果使用了ItemStyle属性,在编辑器里面就会有波浪线提示,而且会产生一个编译时间的warning信息,提示用户使用了一个标记为过期的属性。但是这不会造成旧用户原有代码的任何问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐