如何识别Delphi StringList对象是否已创建

如何识别Delphi StringList对象是否已创建,delphi,tstringlist,Delphi,Tstringlist,我已经在私有部分声明了TStringList的变量。在按钮单击事件中,我希望访问TStringList对象 sVariable:= TStringList.Create; sVariable.add('Test1'); 现在,每当我点击这个按钮时,它的新创建的内存被分配给这个变量。是否有任何属性/函数可以用来确定是否为该变量创建了对象,并且不会给出访问冲突错误 另一种方法是扩展David的答案,通过一个带有read方法的属性 if not Assigned(sVariable) then

我已经在私有部分声明了TStringList的变量。在按钮单击事件中,我希望访问TStringList对象

sVariable:= TStringList.Create;
sVariable.add('Test1');

现在,每当我点击这个按钮时,它的新创建的内存被分配给这个变量。是否有任何属性/函数可以用来确定是否为该变量创建了对象,并且不会给出访问冲突错误

另一种方法是扩展David的答案,通过一个带有read方法的属性

if not Assigned(sVariable) then
  sVariable:= TStringList.Create;
sVariable.add('Test1');
TMyForm = class (TForm)
private
  FStrList : TStringList;
public
  property StrList : TStringList read GetStrList;
  destructor Destroy; override;
end;

implementation

function TMyForm.GetStrList : TStringList;
begin
  if not Assigned(FStrList) then
    FStrList := TStringList.Create;
  Result := FStrList;
end;

destructor TMyForm.Destroy;
begin
  FStrList.Free;
  inherited;
end;

编辑:在重写的析构函数中添加了自由调用。

小心,所有答案都忘记初始化变量/字段,而是重新进行隐式初始化。+1对于access voilation,确实:-)@Downvoter Delphi类实例确实是零初始化的。这确实是可以信赖的。无论何时在析构函数中编写代码,都必须依赖它。如果列表可以从代码的多个部分使用,那么这是一种更好的方法,但如果列表只能在一个位置访问,则可能会造成杀伤力过大。