我想定义以下泛型类型的线程局部变量:
type
TSession<T: TEntity> = class(TInterfacedObject, ISession<T>);
我尝试使用threadvar
关键字定义变量,但由于泛型参数,我遇到了问题:
threadvar
mySession: ISession<T>; // not working
在Delphi中定义泛型类型的线程局部变量的推荐方法是什么?
答案 0 :(得分:1)
您不能在泛型类型(或方法)之外声明开放泛型类型的变量,而这与threadvar
无关。
将threadvar
置于通用类型(当然必须是class threadvar
)内,该类型知道您正在使用的T
的{{1}}类型或ISession<T>
使用ISession<T>
继承的非泛型基类型。
此外,你必须知道你可能在这里创建一个内存泄漏,因为threadvars没有被隐式最终确定(参见here) - 你必须要处理它。