将属性类型为接口的调用映射到一个实现该接口的类?(20分)

  • 主题发起人 主题发起人 arong2008
  • 开始时间 开始时间
A

arong2008

Unregistered / Unconfirmed
GUEST, unregistred user!
在TA类中定义了一个只读属性,类型为IB接口,TB类实现了IB接口,TA定义的一个私有的TB对象。
直接将该属性的read为TB对象,产生类型矛盾错误。
问:
我要如何做将对属性接口的各种方法的调用映射到TB对象?
 
property pIB:IB read FTB.DefaultInterface;
 
To WolfXP:
谢谢解答,可解释一下。邮件也可以:arong2008@yahoo.com.cn
 
IB = interface(IInterface)
['{A0BC31B5-688D-4D41-88A7-036E2E6F172B}']
function CallmeAl : String;
function CallGordonToPlay : String;
end;

TB = class(TInterfacedObject, IB)
public
function CallmeAl : String;
function CallGordonToPlay : String;
end;

TA = class(TObject)
private
aB : TB;
function GetIB : IB;
public
Constructor Create;
Destructor Destroy;
override;
published
property myTB : IB read GetIB;
end;

var
Form1: TForm1;
implementation
{$R *.dfm}
{ TA }
constructor TA.Create;
begin
aB := TB.Create;
end;

destructor TA.Destroy;
begin
inherited;
end;

{ TB }
function TA.GetIB: IB;
begin
Result := aB as IB;
end;

{ TB }
function TB.CallGordonToPlay: String;
begin
Result := '不行, 我正和Tomm在大戰WarCraft III!';
end;

function TB.CallmeAl: String;
begin
Result := 'My name is Al';
end;

procedure TForm1.Button1Click(Sender: TObject);
var
aA : TA;
aB : IB;
begin
aA := TA.Create;
try
aB := aA.myTB;
Edit1.Text := aB.CallmeAl;
Edit2.Text := aB.CallGordonToPlay;
finally
aB := nil;
aA.Free;
end;
end;

李維
 
后退
顶部