请大家帮忙,关于自定义控件继承于抽象类得问题!
我想做一个自定义控件库,所有的自定义控件都要继承于1个接口和一个抽象类,而抽象类继承于UserControl
public abstract class AbstractControl:UserControl{} //抽象类
interface IControlData //接口
public class MCDataView : AbstractControl,IControlData {} //具体的实现控件
这样写编译能通过,但是双击MCDataView 的时候 出现错误提示"由于继承于抽象类,不能被实例化",而双击AbstractControl 却可以出现设计界面。
请问,难道自定义控件不能直接继承于抽象类吗? 如果可以应该怎么避免这个错误?如果不可以,是不是需要在抽象类外面再包一层具体类再继承,或者把所有抽象类全部写成接口?
谢谢
问题点数:100、回复次数:8Top
1 楼windsandy(风中飘絮)回复于 2006-03-07 11:06:08 得分 0
哎,怎么没人回,这么快就掉到第二页了,自己顶一下Top
2 楼zhongkeruanjian(编程亮子)回复于 2006-03-07 11:26:48 得分 50
由于继承于抽象类,不能被实例化
这不明摆的告诉你,继承抽象类的用户类不能出现在设计界面么?那就搞一个具体类,把要实现的方法Virsual吧,
不过我也不知道为什么Top
3 楼windsandy(风中飘絮)回复于 2006-03-07 13:00:16 得分 0
谢谢回复,如果光是"继承于抽象类,不能被实例化" 我到可以理解,不过既然这样,那为什么抽象类本身却可以出现设计界面呢?Top
4 楼iegrhn(‘)回复于 2006-03-07 13:15:49 得分 50
UserControl本身有界面
换成Control就不一样Top
5 楼windsandy(风中飘絮)回复于 2006-03-07 13:23:45 得分 0
也就是说UserControl是具体类,而就算是抽象类继承于UserControl,打开设计界面也只是实例化UserControl 而不是实例化抽象类,所以可以有设计界面,而MCDataView 打开设计界面的时候是实例化AbstractControl 所以不行,谢谢二位得回复 :)Top
6 楼huangkc(软贱&henchman)回复于 2006-03-07 13:29:53 得分 0
"双击AbstractControl 却可以出现设计界面"
这是因为系统自动实例化的原因
用户类继承,就要手动写具体的实例化抽象类
也就是其中的方法
实际可采用,继承系统控件类
然后公共的方法可以由接口先定义Top
7 楼lidong6(立冬)回复于 2006-03-07 13:44:33 得分 0
刚才试了一下,没出现楼主的情况.
反到是在创建abstract的控件时提示"无法创建抽象类"
第二个控件正常.Top
8 楼windsandy(风中飘絮)回复于 2006-03-07 14:40:49 得分 0
实际可采用,继承系统控件类
然后公共的方法可以由接口先定义
开始我是这么做的,但是有2个问题:
第一个是 有的自定义控件 是 组合控件,需要用UserControl
然后在上面画n个系统控件.
第二个是,我想要控制整体控件库的显示风格,需要一个公共父类来解决
现在我只能把 原来的抽象类分成 接口和具体类来解决了。Top




