接口和实现接口的类之间的转换
//接口定义
IFirst =interface
function createNew():IFirst;
function readName():string;
procedure setValue(strValue:string);
end;
//接口实现类
TFirst=class(TInterfacedObject,IFirst)
public
strName:string;
function readName():string;
procedure setValue(strValue:string);
function createNew():IFirst;
end;
//接口类实现
function TFirse.readName():string;
begin
Result:=strName;
end;
function TFirst.setValue(strValue:string);
begin
strName:=strValue;
end;
function TFirst.createNew():IFirst;
begin
Result:=TFirst.create;
end;
//假设有一个方法
function doit(aIFirst:IFirst):IFirst;
begin
Result:=aIFirst.createNew;
Result.setValue('My Name');
end;
下面是调用
var
aTFirst:TFirst;
str:string;
begin
aTFirst:=TFirst.Create;
aTFirst:=TFirst(doit(aTFirst));//没出错;
str:=aTFirst.strName;//出错了;
aTFirst.Free;
end;
为什么??