标签:02 begin end Delphi 接口 SayHello constructor TMan create
uSayHello类如下:
unit uSayHello; interface type // 接口 IGreetable = interface ['{D91DDE09-0FC4-4FE9-AE0D-9877E2F73BF6}'] // 输出函数 function SayHello: string; end; // TInterfacedObject实现了接口的默认方法 TMan = class(TInterfacedObject) // 语言,姓名,皮肤颜色 属性 Language: string; Name: string; SkinColor: string; public // 虚方法virtual, 子类需要使用override来覆盖 constructor create; virtual; end; // 通过接口,继承了TMan的Create同时也继承了TGreetable的SayHello TChinese = class(TMan, IGreetable) public constructor create; override; private function SayHello: string; end; TAmerican = class(TMan, IGreetable) public constructor create; override; private function SayHello: string; end; TFrench = class(TMan, IGreetable) public constructor create; override; private function SayHello: string; end; TKorean = class(TMan, IGreetable) public constructor create; override; private function SayHello: string; end; implementation constructor TMan.create; begin Name := '张三'; Language := '中文'; SkinColor := '黄色'; end; constructor TChinese.create; begin inherited; end; constructor TAmerican.create; begin Name := 'Lee'; Language := '英文'; SkinColor := '黑色'; end; constructor TFrench.create; begin Name := '苏菲'; Language := '法文'; SkinColor := '白色'; end; constructor TKorean.create; begin Name := '金知中'; Language := '韩文'; SkinColor := '黄色'; end; function TChinese.SayHello; begin Result := 'chinese.bmp'; end; function TAmerican.SayHello; begin Result := 'American.bmp'; end; function TFrench.SayHello; begin Result := 'French.bmp'; end; function TKorean.SayHello; begin Result := 'Korean.bmp'; end; end.
界面代码如下,接口调用函数的参数,使用父内函数。接口传参的时候,用子类传参数。
unit ufrmSayHello; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, uSayHello; type TfrmSayHello = class(TForm) GroupBox1: TGroupBox; edtName: TLabeledEdit; edtSkinColor: TLabeledEdit; edtLanguage: TLabeledEdit; btnUSA: TButton; btnKorean: TButton; btnCN: TButton; btnFrench: TButton; Image1: TImage; procedure btnUSAClick(Sender: TObject); procedure btnCNClick(Sender: TObject); procedure btnFrenchClick(Sender: TObject); procedure btnKoreanClick(Sender: TObject); private procedure sayhello(AMan: TMan; G: IGreetable); public { Public declarations } end; var frmSayHello: TfrmSayHello; implementation {$R *.dfm} // 多个不同参数的函数,集成到了一个 procedure TfrmSayHello.sayhello(AMan: TMan; G: IGreetable); begin // 类实现的多态 edtName.Text := AMan.Name; edtLanguage.Text := AMan.Language; edtSkinColor.Text := AMan.SkinColor; // 接口实现的多态 Image1.Picture.LoadFromFile(G.sayhello); end; procedure TfrmSayHello.btnUSAClick(Sender: TObject); var G: IGreetable; AMan: TMan; begin // 按照父类定义,子类创建 AMan := TAmerican.create; G := TAmerican.create; sayhello(AMan, G); end; procedure TfrmSayHello.btnCNClick(Sender: TObject); begin // sayhello很神奇的地方在于,不同的类型参数都可以传过去,不用因为参数不同,就需要声明不同的sayhello函数 sayhello(TChinese.create, TChinese.create); end; procedure TfrmSayHello.btnFrenchClick(Sender: TObject); begin sayhello(TFrench.create, TFrench.create); end; procedure TfrmSayHello.btnKoreanClick(Sender: TObject); begin sayhello(TKorean.create, TKorean.create); end; end.
标签:02,begin,end,Delphi,接口,SayHello,constructor,TMan,create 来源: https://www.cnblogs.com/tianpan2019/p/11471138.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。