是否和TObject与class的关系一样,默认是从iinterface继承的?
解决方案 »
- chart 图表问题!
- 9年前的老程序问题:[DCC Error] myTableUnit.pas(195): E2010 Incompatible types: 'TFileName' and 'string'
- 关于串口数据提取算法问题?急
- 删除数据时出现一个奇怪的问题
- 高分求ado控件的数据字典的实现(up有分,先给100分,若可用分加到2000)
- 如何在Delphi6中使用Excel组件
- 怎样获得DBLookUpComboBox的keyField的值?
- 如何在word文件中的指定的某个位置插入一个表格!!!
- 数据库存入大文件问题
- Delphi高级正则引擎DIRegEx v4.3完整源码(d4/d11)
- Delphi7 ActionList和ImageList真心很讨厌,有没有大侠能帮忙解释下这是为什么。。。。。。
- 紧急求助高手
type
TObject = class;type
IInterface = interface;class是所有类的祖先,interface就是所有接口的祖先
再来个问题,delphi里面在调试时,鼠标移到接口上面会显示 "XXClass as XXInterface"这样的信息。
比如我有如下定义:type
iForm1 = interface
procedure asdf;
end;
iForm2 = interface(iForm1)
procedure fdsa;
end;
TClass1 = class(TObject, IInterface)
constructor Create;
function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
function _AddRef: Integer; stdcall;
function _Release: Integer; stdcall;
procedure asdf;
end;
TClass2 = class(TClass1, iForm2)
constructor Create;
procedure fdsa;
end;
执行函数
procedure TForm1.btn24Click(Sender: TObject);
var
LIForm2: iForm2;
Lcls2: TClass2;
LIIntf: IInterface;
begin
Lcls2 := TClass2.Create;
LIIntf := Lcls2;
LIForm2 := iForm2(LIIntf);
LIForm2.fdsa;
end; 编译没问题,运行错误,调试时LIForm2显示TClass1($D40AB0) as IInterface,不知道问什么
LIIntf := Lcls2;这句话没有将类型转换正确?
procedure TForm1.btn24Click(Sender: TObject);
var
LIForm2: iForm2;
Lcls2: TClass2;
LIIntf: IInterface;
begin
Lcls2 := TClass2.Create;
LIIntf := Lcls2;//这句直接把接口缩小了服务范围
LIForm2 := iForm2(LIIntf);//在LIIntf接口中已经找不到iForm1,iForm2中的方法了
LIForm2.fdsa;//所以这里是找不到任何方法的.
end;可以这样修改,Delphi中可以把所创建的类直接赋值给接口,然后执行接口.所以你上面是画蛇添足了.
这样来写:
var
LIForm2:iForm2;
begin
LIForm2 := TClass2.Create;
LIForm2.fdsa;
end;