なぜ基本インターフェイスタイプの変数にクラスを割り当てることができません。基本インターフェイスタイプの変数にTMyClassオブジェクトを割り当てることができません
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'
はコンパイラのバグまたは単に不可アクションこのです:
たちは以下の持って考えてみましょう。これを回避することはできますか?
次のようになります。インターフェイスの継承は、唯一のインタフェースです。クラスは、実装するインタフェースを明示的に指定する必要があります。これは方法と関係があり、異なるインタフェースバージョン(お互いから派生するもの)が照会されます。 –