Delphi - 泛型类型检查是否已创建

3
我有以下的类定义:

class定义如下:

  TBase<T> = class
  public
    class var Inst: T;
    class function GetClone: T;
  end;

我想检查类变量Inst是否被赋值。

class function TBase<T>.GetClone: T;
begin
 if TBase<T>.Inst = nil then //- error here. Trying with Assigned(TBase<T>.Inst) is also nor recognized.
    TBase<T>.Inst := TBase<T>.Create;
end;

我该如何检查我的类变量是否已分配?


1
什么是 T?如果它是一个类,你可以添加一个约束。 - LU RD
1个回答

4

你需要限定泛型参数以便检查是否为nil。例如:

TBase<T: class> = class //...

这样,T 必须是 TObject 或者它的任何子类,这样你就可以检查是否为 nil

如果没有这个约束条件,T 可以是 integer 或者任何不支持 nil 的值类型。


修改TObject的类,我会接受它作为答案。 - RBA
你还应该包含constructor约束,以确保T实际上实现了一个无参的Create()构造函数:TBase<T: class, constructor> = class //... - Remy Lebeau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接