Delphi 接口(9)-接口和面向對象編程
阿新 • • 發佈:2018-10-28
eat boolean lan abs ons unit tex bst oem
unit uSayHello; interface uses SysUtils, Windows, Messages, Greaphics, Controls, Forms, Dialogs; type IGreetable = interface [‘|0000-0000-0000-0000|‘] function SayHello: PChar; end; TMan = class(TInterfacedObject,IGreetable) Language: string; Married: Boolean; Name:string; SkinColor: string; constructor create; virtual; function SayHello: PChar; virtual; abstract; end; TChinese = class(TMan) public constructor create; override; private function SayHello: PChar; override; end; TAmerican = class(TMan) public constructor create; override; private function SayHello: PChar; override; end; TFrnch = class(TMan) public constructor create; override; private function SayHello: pchar ;override; end; TKorean = class(TMan) public constructor create; override; private function SayHello: pchar ; override; end; TET = class(TInterfacedObject,IGreetable) private function SayHello: pchar; end; TRobot = class(TInterfacedObject,Igreetable) private function SayHello: pchar; end; implementation constructor TMan.create; begin Name := ‘張三‘; Language := ‘中文‘; SkinColor := ‘yellow‘; end; constructor TChinese.create; begin inherited; end; constructor TAmerican.create; begin Name := ‘Lee‘; Language := ‘English‘; SkinColor := ‘black‘; end; constructor TFrnch.create; begin Name:=‘蘇菲‘; Language := ‘法文‘; SkinColor := ‘white‘; end; constructor TKorean.create; begin Name := ‘韓國‘; Language := ‘韓文‘; SkinColor := ‘yellow‘; end; function TChinese.SayHello; begin result := ‘中國人:你好!‘; end; function TAmerican.SayHello; begin result := ‘American:Hello!‘; end; function TFrench.SayHello; begin result := ‘法國人:你好‘; end; function TKorean.SayHello; begin result := ‘韓國人:你好‘; end; function TET.SayHello; begin result := ‘TET:你好‘; end; function TRobot.SayHello; begin result := ‘Robot:你好‘; end; unit uFromSayHello uses //... type TFormSayHello = class(TForm) btnUSA: TButton; btnKorean: TButton; btnCN: TButton; btnFrench: TButton; btnET: TButton; btnRobott: TButton; procedure btnUSAClick(Sender: TObject); procedure btnKoreanClick(Sender: TObject); procedure btnCNClick(Sender: TObject); procedure btnFrenchClick(Sender: TObject); procedure btnETClick(Sender: TObject); procedure btnRobottClick(Sender: TObject); end; procedure TFormSayHello.SayHello(greeting: IGreetable); begin ShoeMessage(greeting.SayHello); end; procedure TFormSayHello.btnKoreanClick(Sender: TObject); begin SayHello(TKorean.create); end; procedure TFormSayHello.btnCNClick(Sender: TObject); begin SayHello(TChinese.create); end; procedure TFormSayHello.btnFrenchClick(Sender: TObject); begin SayHello(TFrench.create); end; procedure TFormSayHello.btnETClick(Sender: TObject); begin SayHello(TET.create); end; procedure TFormSayHello.btnRobottClick(Sender: TObject); begin SayHello(TRobot.create); end;
//進一步修改 unit uSayHello; interface uses SysUtils, Windows, Messages, Greaphics, Controls, Forms, Dialogs; type IGreetable = interface [‘|0000-0000-0000-0000|‘] function SayHello: PChar; end; TMan = class(TInterfacedObject,IGreetable) Language: string; Married: Boolean; Name: string; SkinColor: string; constructor create; virtual; function SayHello: PChar; virtual; abstract; end; TChinese = class(TMan) public constructor create; override; private function SayHello: PChar; override; end; TAmerican = class(TMan) public constructor create; override; private function SayHello: PChar; override; end; TFrnch = class(TMan) public constructor create; override; private function SayHello: pchar ;override; end; TKorean = class(TMan) public constructor create; override; private function SayHello: pchar ; override; end; TET = class(TInterfacedObject,IGreetable) private function SayHello: pchar; end; TRobot = class(TInterfacedObject,Igreetable) private function SayHello: pchar; end; implementation constructor TMan.create; begin Name := ‘張三‘; Language := ‘中文‘; SkinColor := ‘yellow‘; end; constructor TChinese.create; begin inherited; end; constructor TAmerican.create; begin Name := ‘Lee‘; Language := ‘English‘; SkinColor := ‘black‘; end; constructor TFrnch.create; begin Name:=‘蘇菲‘; Language := ‘法文‘; SkinColor := ‘white‘; end; constructor TKorean.create; begin Name := ‘韓國‘; Language := ‘韓文‘; SkinColor := ‘yellow‘; end; function TChinese.SayHello; begin result := ‘中國人:你好!‘; end; function TAmerican.SayHello; begin result := ‘American:Hello!‘; end; function TFrench.SayHello; begin result := ‘法國人:你好‘; end; function TKorean.SayHello; begin result := ‘韓國人:你好‘; end; function TET.SayHello; begin result := ‘TET:你好‘; end; function TRobot.SayHello; begin result := ‘Robot:你好‘; end; unit uFromSayHello uses //... type TFormSayHello = class(TForm) btnUSA: TButton; btnKorean: TButton; btnCN: TButton; btnFrench: TButton; btnET: TButton; btnRobott: TButton; procedure btnUSAClick(Sender: TObject); procedure btnKoreanClick(Sender: TObject); procedure btnCNClick(Sender: TObject); procedure btnFrenchClick(Sender: TObject); procedure btnETClick(Sender: TObject); procedure btnRobottClick(Sender: TObject); end; procedure TFormSayHello.SayHello(greeting: IGreetable); begin ShowMessage(greeting.SayHello); end; //人類問候 procedure TFormSayHello.SayHello(AMan: TMan) begin editName.text := AMan.Name; editLanguage.text := AMan.Language; editSkinColor.text := AMan.SkinColor; ShowMessage(AMan.SayHello); end; //這裏新增來自非人類的另類問候方式. //通過方法重載,使得程序的改動降低到最少. procedure TFormSayHello.SayHello(greeting: Igreetable) begin editName.text := copy(greeting.SayHello,1,6); editLanguage.text := copy(greeting.SayHello,7,4); editSkinColor.text := copy(greeting.SayHello,11,6); ShowMessage(greeting.SayHello); end; procedure TFormSayHello.btnKoreanClick(Sender: TObject); begin SayHello(TKorean.create); end; procedure TFormSayHello.btnCNClick(Sender: TObject); begin SayHello(TChinese.create); end; procedure TFormSayHello.btnFrenchClick(Sender: TObject); begin SayHello(TFrench.create); end; procedure TFormSayHello.btnETClick(Sender: TObject); begin SayHello(TET.create); end; procedure TFormSayHello.btnRobottClick(Sender: TObject); begin SayHello(TRobot.create); end;
Delphi 接口(9)-接口和面向對象編程