接口的出现更递了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;