转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
【Gabing Delva 第2篇】         ★★★★

【Gabing Delva 第2篇】

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

二、接口—2004.03.29~2004.03.30

接口,这个词最初接触时,我对这个词义很难理解。因为它听起来更像与硬件相关的。还有一个词COM,它代表的意思就更乱,不同领域里出现的COM一词大不相同。但在明白接口一词其理后,我还得说译得很恰当,形象地说明了它的本质和用途。只是伟大、丰富的汉语表意太深。

为什么要用接口呢?不用不行吗?我没资格给你答案,但我知道接口的出现起码解决了如下问题。我们都知道,Delphi和Java都不支持C plus plus可以支持的多重继承。Delphi规定一个类只能有一个父类,这是VCL树能流畅而为唯美地展现的根本。Java的追求是稳定,它更不可能让我们随便多重继承。那我们如果想继承太极的意又要继承少林的形怎么办呢?这就是接口要做的事。另外,接口是一种机制,在Delphi这种先声明,后实现的语言里,更显个性。因为,接口只声明/定义方法,而不实现。在Java中abstract类似乎可以替代接口,但我的理解是后者在继承层次增加后会突显其整洁的优势。

在Delphi里,从Delphi3加进了接口,并逐渐用它丰富了VCL,到了Delphi5时,Borland的接口技术在RAD中已趋于完美。嗯,当然,Delphi5是RAD最好的版本。以后的版本转向了在Web功能的丰富,大名鼎鼎的Web Service技术Delphi就是用接口实现的。5.0以前,接口的老祖宗是IUnknown,看上去就知道这是针对MicroSoft的那个我刚提过的,讨厌的名词COM的。在Delphi6推出时,正值Linux狼烟四起, Borland为了跨平台战略而大肆宣扬Kylix,这个祖宗变换了个大号,叫IInterface。我就是从那时起,知道了Kylix,看到了接口的广泛应用。

我们都知道,Delphi中的对象不能自动去活,它没有Java和C Sharp的垃圾回收机制。据李维先生说,Delphi之父Anders Hejelsberg当初设计Delphi时,让对象变量写入堆中而不是堆栈里,就是想在日后让Delphi可以自动回收闲置的对象。而直至今日,Danny Thorpe也没有让Delphi实现这个功能(虽然没有自动回收的Delphi已经几近完美)。反倒Anders Hejelsberg在到微软后实现了自己的想法,因为c sharp里已经实现了这个功能。可见C Sharp是Anders未尽理想的续篇。

嘿嘿,既然是闲谈,难免跑题。说自动去活是想说在Delphi里,接口是可以自动去活的。接口的对象计算引用数,使内存的管理自动化。Delphi的程序员更得了解引用技术值(Reference Count)。

下面就看看在Delphi里的接口吧。

我们先定义好接口和类:

type

  IMyidol=interface

  [''''{30DDAB80-81BF-11D8-A27B-930F92738A22}'''']  //shift+ctrl+G 生成GUID

  procedure name(s:string);  //接口方法不能实例化

  procedure others;

  end;

type

  TAnders=class(TInterfacedObject,IMyidol)

//继承一个通用类TInterfacedObject,并实现接口Imyidol。

  procedure name(s:string);  //shift+ctrl+C

  procedure others;

  end;

然后实现:

procedure TAnders.name(s: string); //shift+ctrl+C 自动产生

begin

Form1.edit1.Text:=s;

end;

 

procedure TAnders.others;

begin

 

end;

 

procedure TForm1.Button1Click(Sender: TObject);

var

Anders:TAnders;

begin

Anders:=TAnders.Create;

Anders.name(''''Anders Hejlsberg!'''');

Anders.Free;

end;

 

procedure TForm1.Button2Click(Sender: TObject);

var LiWei:IMyidol;

begin

 LiWei:=TAnders.Create;

 LiWei.name(''''LiWei!''''); //不必Free;

end;

这是效果图。

 

紧接着我们再来看看在Java中如何实现接口,然后我们再来对比着聊一聊。

interface Myidol{

  void name(String s);

  void others();

}

 

class SuperMan{  //定义一个类

}

 

class Man extends SuperMan implements Myidol{

//extends继承父类;implements实现接口。这里为了演示,其实可以不继承。

  public void name(String s){

    System.out.println(s);

  }

  public void others();

}

 

public class Do{

  public static void main(String[] args){

    Man man=new Man();

    man.name("Anders Hejlsberg!");

  }

}

看看效果图吧。

我们看到。Delphi的类在声明时不能写具体怎么实现,而要到implementation后面去写实现语句。而Java就不用这么“麻烦”,想到哪里就写到哪。这是他们的各自特点。也正因此,一个严谨,一个灵活。还有一个问题是,类可以继承多个接口。那接口可不可以继承多个接口呢?Java里的答案是肯定的,而Delphi7告

[1] [2]  下一页


[Delphi程序]【Gabing Delva 第1篇】  [Delphi程序]【Gabing Delva 第0篇】我的小铁锨(代序)
教程录入: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……
    咸宁网络警察报警平台