delphi - 为什么我的通用匿名方法类型不兼容?

标签 delphi generics delphi-2010 anonymous-methods

在我的学习过程中,我使用 Nick Hodges 的《Coding in Delphi》一书。我正在使用Delphi 2010

在有关匿名方法的章节中,他提供了一个关于使用伪造 .NET 的非常有趣的示例。当我尝试编译该示例时,编译器出现错误。请帮我得到结果。

我的类(class):

type
  TgrsObj = class
    class procedure Using<T: class>(O: T; Proc: TProc<T>); static;
  end;

implementation

{ TgrsObj }

class procedure TgrsObj.Using<T>(O: T; Proc: TProc<T>);
begin
  try
    Proc(O);
  finally
    O.Free;
  end;
end;

这是我尝试使用上面的代码的方法:

procedure TForm4.Button1Click(Sender: TObject);
begin
  TgrsObj.Using(TStringStream.Create,
    procedure(ss: TStringStream)
    begin
      ss.WriteString('test string');
      Memo1.Lines.Text := ss.DataString;
    end);
end;

编译器错误:

[DCC Error] uMain.pas(36): E2010 Incompatible types: 'TProc<ugrsObj.Using<T>.T>' and 'Procedure'

最佳答案

这是因为 Delphi 中的类型推断很差。事实上,它可以从第一个参数推断出 T,但不幸的是,编译器并不满足于完美匹配的第二个参数。

您必须像这样显式声明类型参数:

TgrsObj.Using<TStringStream>(TStringStream.Create, procedure(ss: TStringStream)
  begin
    ss.WriteString('test string');
    Memo1.Lines.Text := ss.DataString;
  end);

关于delphi - 为什么我的通用匿名方法类型不兼容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23581241/

相关文章:

c++ - 构建 C/C++ 库以将其链接到 Delphi 应用程序中......如何?

json - Delphi:将 JSON 数组添加到 JSON 对象

delphi - 压缩组件

delphi - 如何获取我的应用程序中当前事件的表单?

multithreading - 在Delphi中,TDataSet线程安全吗?

windows - 如何检查 Windows 防火墙中的规则?

Delphi 2010 访问 TIFF 内的帧

java - 如何避免此 java 泛型警告

java - 重写包含泛型参数的方法

generics - Kotlin中的Nothing或Any和有什么区别