转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> VB.NET程序 >> 正文
Henry的VB.NET之旅(八)—接口         ★★★★

Henry的VB.NET之旅(八)—接口

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1807 更新时间:2009/4/23 19:01:35

       Henry的VB.NET之旅(八)—接口

                                    韩睿

 

“还有两种继承方法?”我是真正被VB.NET的强大功能所折服了。求知的渴望驱使着我向大李露出了一个最灿烂的笑容,“行了,别傻笑了,我告诉你不就成了。”大李不禁也笑了起来。

“刚才我说到‘脆弱的基类’时,就提到实现继承最大的问题,就在于基类与派生类之间的关系过于紧密,还记得吧?基类实现细节往往会泄露出来,这不是我们愿意看到的封装情况,所以有很多程序设计师就想尽方法来改进这一问题,其中最出名的,就是COM了。”

“COM?我在VB6中经常用呀,是一种组件形式呀。”我不是太明白大李的话,这和面向对象的继承有什么关系?

“你说的不错,正是通过组件的这种封装方式,我们就可以把实现继承局限于在组件内部使用,而我们使用组件时,就不用理会它内部是什么,怎么实现的。这就可以避免不可预测地对基类的修改。我们把利用组件的组织程序方法称为面向组件程序设计,但这也是一种面向对象的设计方法,不过是更具强制性。组件支持组件内部的实现继承,还支持接口继承。”

“接口继承,我不是太清楚。不过,接口我是清楚的,就是组件开放的属性、方法与事件、公用变量的定义方法。我在VB6中也接触过接口编程,不是太方便,好象要把定义了方法却没有写实现过程的类编译成DLL文件,VB6会自动将它创建为接口,不过只能是隐藏的,不是显式定义的。”我回忆了一下说。

大李微微点了点头说:“从面向对象的观点来看,接口就是对象的外观,而对象实际的工作方式就是实现。把接口与实现分离开就是我们要进行封装的动机。用户只能通过接口来操作,但是看不到具体的实现的代码。”

大李顿了一顿,然后接着说:“VB.NET 以前的 Visual Basic 版本可以使用接口,但不能直接创建它们。VB.NET 却是允许可以用 Interface 语句定义真正的接口的喔!”

此言一出,真让我大吃一惊。“我们也可以直接定义接口吗?”

“当然,”大李说,“在VB.NET中,和类一样,接口也可以定义属性、方法和事件。但正如我刚才说到的,与类不同的是,接口并不提供实现。现在的接口,是由类来实现的,并从类中被定义为单独的实体。”

大李手指在桌面上重重的敲了一下,加强了一下语气:“我们可以这样来理解,接口表示的是一种约定。实现接口的类必须严格按其定义来实现接口的每个方面。有了接口,就可以将功能定义为一些紧密相关成员的小组。可以在不危害现有代码的情况下,开发接口的增强型实现,从而使兼容性问题最小化。也可以在任何时候通过开发附加接口和实现来添加新的功能。虽然接口实现可以进化,但接口本身一旦被发布就不能再更改。对已发布的接口进行更改会破坏现有的代码。若把接口视为约定,很明显约定双方都各有其承担的义务。接口的发布者同意不再更改该接口,接口的实现者则同意严格按设计来实现接口。”

“也就是说,在VB.NET中,接口是用类来实现的,就象是个抽象类,只是关键字用的是Interface,不是class,对吗?”我还是很好奇。

“接口的实现可以是类,也可以是结构。接口的定义用的是Interface关键字,实现时用的是Implements关键字”大李淡淡的一句话,使我在心中开始回忆起类和结构的差别来(详见前文《类和结构》)。

大李接着跟我解说:“接口的成员包括其成员声明引入的成员和从其基接口继承的成员。只有嵌套类型、方法、属性和事件才能作为接口成员。方法和属性不能有实体。接口成员隐式地定为是Public,而且不能指定访问修饰符。接口自已倒是可以添加修饰符。”大李跟着看了我一眼,就在电脑上开始写起示例来:

Public Interface IHenry

    Sub subX(ByVal x As Integer)

    Function fcnY(ByVal y As Integer) As Long

    Property proZ() As String

End Interface

Public Class CHenry

    Implements IHenry

    Private z1 As String

    Sub subX(ByVal x As Integer) Implements IHenry.subX

        ''''填写实现代码

    End Sub

    Function fcnY(ByVal y As Integer) As Long Implements IHenry.fcnY

        ''''填写实现代码

    End Function

    Property proZ() As String Implements IHenry.proZ

        Get

            Return z1

        End Get

        Set(ByVal Value As String)

            z1 = Value

        End Set

    End Property

End Class

 

 

大李指着代码说:“你看,我用Interface定义了一个接口IHenry(笔者注:一般来说,接口的命名第一个字母为I,这并没有什么强制的含义,但却是一个通用的命名规则),内含三个方法与

[1] [2]  下一页


[C语言系列]NET 中C#的switch语句的语法  [系统软件]托拽Explore中的文件到VB.net的窗口
[系统软件]Boost库在XP+Visual C++.net中的安装  [常用软件]新配色面板:Paint.Net3.0RC1官方下载
[常用软件]用内建的“Net Meeting”聊天  [VB.NET程序]Henry的VB.NET之旅(三)—共享成员
[VB.NET程序]Henry的VB.NET之旅(二)—构造与析构  [VB.NET程序]Henry的VB.NET之旅(一)—失踪的窗体
[VB.NET程序]在托盘上显示Balloon Tooltip(VB.NET)  [VB.NET程序]Henry手记-VB.NET中动态加载Treeview节点(二)
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台