如何在Delphi中定义泛型类型的线程局部变量

时间:2016-07-07 10:34:30

标签: delphi generics thread-safety

我想定义以下泛型类型的线程局部变量:

type
  TSession<T: TEntity> = class(TInterfacedObject, ISession<T>);

我尝试使用threadvar关键字定义变量,但由于泛型参数,我遇到了问题:

threadvar
   mySession: ISession<T>; // not working

在Delphi中定义泛型类型的线程局部变量的推荐方法是什么?

1 个答案:

答案 0 :(得分:1)

您不能在泛型类型(或方法)之外声明开放泛型类型的变量,而这与threadvar无关。

threadvar置于通用类型(当然必须是class threadvar)内,该类型知道您正在使用的T的{​​{1}}类型或ISession<T>使用ISession<T>继承的非泛型基类型。

此外,你必须知道你可能在这里创建一个内存泄漏,因为threadvars没有被隐式最终确定(参见here) - 你必须要处理它。