Delphi的接口(2) - 第一个例子2012-12-10 博客园 万一第一个例子的操作实况录像:代码文件:
unit Unit1; interface usesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls; typeTForm1 = class(TForm)Button1: TButton;Button2: TButton;Button3: TButton;Button4: TButton;procedure Button1Click(Sender: TObject);procedure Button2Click(Sender: TObject);procedure Button3Click(Sender: TObject);procedure Button4Click(Sender: TObject);end; IMyInterface1 = interfacefunction Func1: Integer;function Func2: Integer;end; IMyInterface2 = interfaceprocedure Proc1;procedure Proc2;end; TMyClass1 = class(TInterfacedObject, IMyInterface1, IMyInterface2)publicprocedure Proc1;procedure Proc2;function Func1: Integer;function Func2: Integer;end; varForm1: TForm1; implementation {$R *.dfm} { TMyClass1 } function TMyClass1.Func1: Integer;beginShowMessage("IMyInterface1.Func1");Result := 0;end; function TMyClass1.Func2: Integer;beginShowMessage("IMyInterface1.Func2");Result := 0;end; procedure TMyClass1.Proc1;beginShowMessage("IMyInterface2.Proc1");end; procedure TMyClass1.Proc2;beginShowMessage("IMyInterface2.Proc2");end; procedure TForm1.Button1Click(Sender: TObject);varc: TMyClass1;beginc := TMyClass1.Create; c.Func1;c.Func2; c.Proc1;c.Proc2; c.Free;end; procedure TForm1.Button2Click(Sender: TObject);vari1: IMyInterface1;begini1 := TMyClass1.Create;i1.Func1;i1.Func2;end; procedure TForm1.Button3Click(Sender: TObject);vari2: IMyInterface2;begini2 := TMyClass1.Create;i2.Proc1;i2.Proc2;end; procedure TForm1.Button4Click(Sender: TObject);varc: TMyClass1;i1: IMyInterface1;i2: IMyInterface2;beginc := TMyClass1.Create; i1 := c;i1.Func1;i1.Func2; i2 := c;i2.Proc1;i2.Proc2; //c.Free; {}end; end.
示例注释(现在应该知道的):
{1、接口命名约定 I 起头, 就像类从 T 打头一样. 2、接口都是从 IInterface 继承而来; 若是从根接口继承, 可省略. 3、接口成员只能是方法、属性, 没有字段. 4、接口成员都是公开的, 不需要 private、protected、public、published 等任何访问限制. 5、因为接口只声明、无实现, 也用不到继承与覆盖相关的修饰(virtual、dynamic、abstract、override). 6、一个接口可以从另一个接口继承, 但不能从多个接口继承; 不过 Delphi.Net 已支持接口的多继承了. 7、一个类可以实现多个接口: TMyClass = class(父类, 接口1, 接口2, ...)end; 8、不过实现接口的类有多么丰富, 接口只拥有自己声明的成员. 9、实现接口的类一般继承于 TInterfacedObject, 直接从 TObject 继承会增加一些麻烦而重复的工作. 10、接口在用完后会自释放, 并同时释放拥有它的类; 这很方便, 但同时带来很多问题.}