program Demo1; { Create Date: 2014-06-29 Author: P.S.M 1.接口Demo1 } {$APPTYPE CONSOLE} uses SysUtils; {定義接口} type ITestInterface = interface {GUID經過CTRL+G自動產生} ['{15EAD871-2B5E-4F51-A14E-7D518A2371EF}'] procedure Test; end; {TInterfacedObject 實現了_AddRef, _Release方法能夠自動釋放對象} TTest1 = class(TInterfacedObject, ITestInterface) public {接口實現} procedure ITestInterface.Test = GetTest; {測試接口} procedure GetTest; {重載Destroy方法} destructor Destroy;override; end; TTest2 = class(TInterfacedObject, ITestInterface) public {接口實現} procedure Test; {重載Destroy方法} destructor Destroy;override; end; { TTest } destructor TTest1.Destroy; begin WriteLn('對象1釋放了'); sleep(2000); inherited Destroy; end; procedure TTest1.GetTest; begin WriteLn('接口1'); end; { TTest2 } destructor TTest2.Destroy; begin WriteLn('對象2釋放了'); sleep(2000); inherited Destroy; end; procedure TTest2.Test; begin WriteLn('接口2'); end; procedure Output(Obj: ITestInterface); begin Obj.Test; end; var ITest1, ITest2: ITestInterface; begin {接口何時釋放? 當它的引用計數爲0是自動釋放,做用域有效在函數體bend end,函數退出時自動減小引用計數 } try ITest1 := TTest1.Create; ITest2 := TTest2.Create; Output(Itest1); OutPut(ITest2); except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end.