VB6实现真正的继承【转】
VB6实现真正的继承【转】
MSDN中有.
Visual Basic 已成为二进制代码重用的先驱—控件就是典型的例子。通过将控件的实例放置到窗体上就可以重用该控件中的代码。这被称为包含(containment) 关系或者具有 (has-a) 关系;也就是说,该窗体包含或者具有CommandButton。 详细信息 包含关系在本章后面的“对象模型”作了讨论。 委派给实现的对象 就象在“创建和实现接口”中所提到的那样,接口就象契约一样—必须在外部对象的类模块中实现内部对象接口的所有成员。不过,在委派内部对象的属性和方法为代表方面,可以有很多选择。在一个方法中,可能直接委派一个内部对象为代表,传递未更改的参数,而在另一种方法中,可能执行在调用该内部对象之前自己的部分代码,在第三种方法中仅仅执行自己的代码,而完全忽略内部对象! 例如,假设有一个 OneManBand 类和一个 Cacophony 类,这二者都产生声音。希望把 Cacophony 类的功能添加到 OneManBand 类中,并重用 Cacophony 类方法的一些实现。 'OneManBand 实现 Cacophony 接口。 '保存引用的对象变量。 Private Sub Class_Initialize() 现在,就可以在“对象”下拉菜单上选择 Cacophony,然后为 Cacophony 接口的方法获得过程模板。为了实现这些方法,可以委派给 Cacophony 对象。例如,Beep 方法可能看起来如下所示: Private Sub Cacophony_Beep(ByVal Frequency As Double,_ 上面的实现是非常简单的。外部对象 (OneManBand) 直接委派给内部对象 (Cacophony),不作任何更改即可重用 Cacophony 对象的 Beep 方法。这是一件好事,但仅仅只是个开端。 Implements 语句对于代码重用来说,是一个非常强大的工具,因为它给予很大的灵活性。可能想更改 OneManBand 类的 Beep 方法的效果,方法是在对内部 Cacophony 对象的调用之前(或之后),插入自己的代码: Private Sub Cacophony_Beep(ByVal Frequency As Double,_ 对于这些方法来说,实现可能会直接委派内部 Cacophony 对象为代表,而对于另外一些来说,可能在委派之前或之后插入自己的代码—或者甚至完全忽略委派,而完全用自己的代码来实现一种方法。 因为 OneManBand 类实现 Cacophony 接口,所以可以将它和调用该接口的任何音乐应用程序一起来使用。其实现细节可从调用应用程序处隐藏起来,但是结果发出的声音都是自己的。 注意 COM 提供了另一个机制进行二进制代码重用,该机制叫凝聚。在集合中,无更改地重用一个完整的接口,而且该实现是由被凝聚的类的一个实例所提供的。Visual Basic 不支持这种代码重用的窗体。 这样一来不冗长乏味吗? 如果有 Visual Basic 专业版或企业版,就可以使用“Visual Basic 扩展性”模型,创建自己的委派向导,使任务自动化,类似于专业版和企业版中的“类向导”一样。 详细信息 在部件软件中多态和多重接口的使用,在《部件工具指南》中,“创建 ActiveX 部件”中的“部件设计的一般准则”中作了讨论。 关于“扩展性模型”的使用,在《部件工具指南》中的“用外接程序来扩展 Visual Basic 环境”中作了文档说明。 原文参看:http://bbs.gameres.com/showthread.asp?threadid=114535&page=1
分类:
技术杂谈
标签:
VB, 继承
好文要顶
关注我
收藏该文
联系我
0
0
(请您对文章做出评价)
? 上一篇:
(PDF.NET框架实例讲解)将存储过程映射为实体类
? 下一篇: 移花接木:当泛型方法遇上抽象类----我的“内存数据库”诞生记 posted on 2011-08-31 18:40 深蓝医生 阅读(510) 评论(0) 编辑 收藏 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |