为什么我不能将类分配给其基接口类型的变量。
考虑我们有以下内容:
IInt1 = interface
procedure Test1;
end;
IInt2 = interface(IInt1)
procedure Test2;
end;
TCustomClass = class(TInterfacedObject)
end;
TMyClass = class(TCustomClass, IInt2)
procedure Test1;
procedure Test2;
end;
var
Obj: IInt1;
begin
Obj := TMyClass.Create; // <!-- E2010 Incompatible types: 'IInt1' and 'TMyClass'
...
end;
E2010 Incompatible types: 'IInt1' and 'TMyClass'
这是编译器中的错误还是不允许的操作。这可以解决吗?
答案 0 :(得分:2)
在声明中已实现的接口列表中包含IInt1
:
TMyClass = class(TCustomClass, IInt1, IInt2)
end;
答案 1 :(得分:0)
上面有三个错误,如下所示:
因此,您的代码片段应如下所示
IInt1 = interface
['{218BE5BB-0784-4E4A-923C-F1F1E116F38B}']
procedure Test1;
end;
IInt2 = interface(IInt1)
['{635D00B2-AC59-43A9-A7DB-660F53EBCDD8}']
procedure Test2;
end;
TCustomClass = class(TInterfacedObject)
private
procedure Test1;
end;
TMyClass = class(TCustomClass, IInt2)
private
procedure Test2;
end;
...
var
Obj: IInt1;
begin
Obj := TMyClass.Create AS IInt1;
...