代码文件:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); end; IMyInterface1 = interface function Func(a,b: Integer): Integer; end; TAdd = class(TInterfacedObject, IMyInterface1) public function Func(a: Integer; b: Integer): Integer; destructor Destroy; override; end; TMul = class(TInterfacedObject, IMyInterface1) public function Func(a: Integer; b: Integer): Integer; destructor Destroy; override; end; var Form1: TForm1; implementation {$R *.dfm} { TAdd } destructor TAdd.Destroy; begin ShowMessage('TAdd.Destroy'); inherited; end; function TAdd.Func(a, b: Integer): Integer; begin Result := a + b; end; { TMul } destructor TMul.Destroy; begin ShowMessage('TMul.Destroy'); inherited; end; function TMul.Func(a, b: Integer): Integer; begin Result := a * b; end; { TForm1 } procedure TForm1.Button1Click(Sender: TObject); var I: IMyInterface1; begin I := TAdd.Create; ShowMessage(IntToStr(I.Func(9, 9))); {18} I := TMul.Create; {I 在指向新的目标前会先释放前面所属的类} ShowMessage(IntToStr(I.Func(9, 9))); {81} end; end.