接口的出現更遞了c++的多重的繼承,在應用中相當重要一部分,然而接口中最主要的一塊又是com接口(微軟提供的接口標准),接口只是服務聲明,而在一定形式並沒有實現類方法。
下面是一段簡單的代碼讓我們來看一下。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
Edit2: TEdit;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
// 定義接口ISampleInterface
ISampleInterface= Interface(IUnknown)//所有接口都由IUnknown繼承,com接口也不例外
['{48616967-425B-4E90-AA8B-F88FFC26D1D7}']//GUID,唯一的值,可以通過ctrl+shift+g來產生
function GetName:string;
procedure SetName(s:string);//方法定義
end;
// 實現接口ISampleInterface
TSampleImpl=class(TInterfacedObject,ISampleInterface)//接口繼承
public
__Name: string;
function GetName:string;
procedure SetName(s:string);
end;
var
Form1: TForm1;
MyInterface:ISampleInterface;
implementation
{$R *.dfm}
function TSampleImpl.GetName:string;//方法實現
begin
GetName:=__Name;
end;
procedure TSampleImpl.SetName(s:string);
begin
__Name:= s;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
MyInterface:= TSampleImpl.Create;//建立對象
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
MyInterface.SetName(Edit1.Text);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Edit2.Text:=MyInterface.GetName;
end;