我们在开发自定义控件的时候,选择一个正确的基类,可以大大的缩短我们的开发时间。那么要如何正确的选择要继承的基类呢?我们可以来了解一下自定义控件所选择基类的方式。
注意:这是仅仅是讲基本控件的基类选择,复杂的数据控件就不在此列了。
1,
Control类
这个是类是所有自定义控件的基础类,所有的控件都是直接或者间接的继承了该类,这个类提供了控件的最基础与必要的属性。比如控件的ID,ClientID,UniqueID,Visible等我们常见的属性。这个类还包含了控件生命周期的事件,如下:
public event EventHandler DataBinding;
public event EventHandler Disposed;
public event EventHandler Init;
public event EventHandler Load;
public event EventHandler PreRender;
public event EventHandler Unload;
继承Control类的优点是可扩展性最强,缺点就是缺少比较多的我们常用的属性,比如布局,外观样式等属性,这些属性,如果要我们自己去实现,那就太麻烦了。所以,如果我们的控件对样式的要求比较高,可以考虑继承下一个基类。
2,
WebControl类
从这个类的名词我们可以看出来,这个类像是从.net过度到asp.net了,它就是从Control类继承过来专为web简单控件开发的基类。因为它继承了Control类,所以它具有Control类的所有不是私有的属性,方法,事件等。除此之外,它还扩展了很多控制控件样式的属性,比如BackColor,Font,Height,Width等属性。如果我们是要做一个简单的Web控件,选择继承WebControl类是最合适不过的了。
3,
CompositeControl类
如果我们的自定义控件是把多个简单控件组合成一个控件,那么建议选择CompositeControl类作为基类。因为考虑到多个控件在解析html时可能会造成ID重复的问题,我们必须选择继承
INamingContainer接口,而CompositeControl类就是继承自WebControl类与INamingContainer接口,所以它是组合控件的最适合的基类了。
4,
现有控件
如果我们的自定义控件只是想在现有的控件上面增加一些功能,那么就可以考虑继承自现有的控件。比如,我们想为微软的TextBox增加一个OldText属性,用来保存上一次的Text值,那么就可以考虑继承自TextBox控件,这样我们所要写的代码非常少。因为其它的功能我们都从TextBox继承过来了,只需要扩展新的功能就可以了。Label,TextBox,Button,甚至是GridView控件,都可以作为新控件的基类,就看我们的实际需求了。
总结:WebControl类应该会是我们使用的最多的自定义控件基类,因为它扩展方便,又具备了Web控件的大部分的功能。2