泛型和接口(interface)的Delphi错误

标签 delphi generics interface

下面的 Delphi 代码在 Foo 函数中没有编译错误,但 Foo2 函数编译。它让我发疯,有人有想法吗?

type

  IA<T> = Interface
  end;

  TA<T> = class(TInterfacedObject, IA<T>)
    function Foo<V> : IA<V>;
  end;

  TB<U,T> = class(TA<T>)
  end;

  TC = class
    function Foo2<T,V> : IA<V>;
  end;


implementation

{ TA<T> }

function TA<T>.Foo<V>: IA<V>;
begin
  Result := TB<T,V>.Create;
end;

{ TC }

function TC.Foo2<T,V>: IA<V>;
begin
  Result := TB<T,V>.Create;
end;

最佳答案

这看起来确实很奇怪,我怀疑这是一个错误。您可以通过声明 TB<U, T> 来解决它。实现 IA<T> .改变

TB<U, T> = class(TA<T>)


TB<U, T> = class(TA<T>, IA<T>)

请注意,删除了所有泛型的代码确实可以编译:
type
  IA = interface
  end;

  TA = class(TInterfacedObject, IA)
    function Foo: IA;
  end;

  TB = class(TA)
  end;

  TC = class
    function Foo2: IA;
  end;

function TA.Foo: IA;
begin
  Result := TB.Create;
end;

function TC.Foo2: IA;
begin
  Result := TB.Create;
end;

这似乎支持了我的信念,即您的代码是正确的并且应该被编译器接受。

关于泛型和接口(interface)的Delphi错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55117207/

相关文章:

c# - 在 wpf 中绑定(bind)模型的通用属性

c# - 如何使用虚方法显式实现接口(interface)?

delphi - 如何通知 Free Pascal 编译器为编译的应用程序设置区域设置 ID

Delphi构造函数和类构造函数

generics - 专精未稳定前如何专精稳定 channel ?

c# - 通用列表性能优化

Java : Accessing Hidden Interface Field

javascript - 元素隐式具有 'any' 类型,因为类型 'xxx' 没有索引签名。ts(7017)

multithreading - TTimer.OnTimer是否会使工作线程与主线程同步?

delphi - 从 Delphi XE 连接 TFS 2010