Delphi中接口的定义和实现两例

type IShowString = interface(IUnknown) procedure ShowString(S: String); end; TIObject = class(TObject, IShowString) procedure ShowString(S: String); e

type

  IShowString = interface(IUnknown)

    procedure ShowString(S: String);

  end;

  TIObject = class(TObject, IShowString)

    procedure ShowString(S: String);

  end;

===========================================================================

type

  IShowString = interface(IUnknown)

    procedure ShowString(S: String);

  end;

  TComponent1 = class(TComponent, IShowString)

  protected

    procedure ShowString(S: String); virtual;

  end;

  TComponent2 = class(TComponent1)

  protected

    procedure ShowString(S: String); override;

  end;

===========================================================================

var

  IShowStr: IShowString;

begin

//类和它们实现的接口是兼容的

  IShowStr := TComponent2.Create(nil);

  IShowStr.ShowString('dd');

//接口引用计数方法会最终销毁接口所属的对象,所以我们不需要显式销毁对象。我们下面会详细讲述这个问题。

end;

===========================================================================

function GetInterface(const IID: TGUID; out Obj): Boolean;如:

var

  IShowStr: IShowString;

begin

  TComponent2.Create(nil).GetInterface(IShowString, IShowStr);

  IShowStr.ShowString('dd');

end;

===========================================================================

begin

  (TComponent2.Create(nil) as IShowString).ShowString('dd');

end;

===========================================================================

var

  Obj: TComponent2;

  IShowStr: IShowString;

begin

  Obj := TComponent2.Create(nil);

  IShowStr := Obj;

  Obj.Free;

  IShowStr.ShowString('dd');

end;

===========================================================================

type

  IShowString1 = interface(IUnknown)

    procedure ShowString(S: String);

  end;


  IShowString2 = interface(IUnknown)

    procedure ShowString(S: String);

  end;


  TComponent1 = class(TComponent, IShowString1, IShowString2)

  protected

//以下两行就是方法分辨子句

    procedure IShowString1.ShowString = ShowString1;

    procedure IShowString2.ShowString = ShowString2;


    procedure ShowString1(S: String);

    procedure ShowString2(S: String);

  end;

===========================================================================

type

  IShowString = interface(IUnknown)

    procedure ShowString(S: String);

  end;


  TComponent1 = class(TComponent, IShowString)

    procedure ShowString(S: String);

  end;


  TComponent2 = class(TComponent, IShowString)

IShowStr: IShowString;

//以下这句可以代替声明ShowString

    property ShowStr: IShowString read IShowStr implements IShowString;

  end;

===========================================================================

constructor TComponent2.Create(AOwner: TComponent);

begin

  inherited;

  IShowStr := TComponent1.Create(AOwner);

end;


procedure TForm1.Button1Click(Sender: TObject);

var

  Component2: TComponent2;

begin

  Component2 := TComponent2.Create(nil);

  Component2.ShowStr.ShowString('dd');

end;




相关推荐

[!--temp.pl--]