Delphi接口

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.

  

相關文章
相關標籤/搜索