Neb*_*tic -2 delphi variables global
我在Delphi单元中设置全局变量时出现问题:
unit SomeUnit;
...
interface
...
var
variable1: String;
...
implementation
procedure TSomeForm.SetNewVersion(variable1: String);
begin
variable1 := variable1; //here is problem
end;
Run Code Online (Sandbox Code Playgroud)
如果它具有与过程中的本地参数值相同的名称,如何为全局变量赋值?如果这是某种形式值,可以这样做:
TSomeForm.variable1 = variable1;
Run Code Online (Sandbox Code Playgroud)
但问题是变量是单位的全局变量吗?
SomeUnit.variable1 = variable1; // this dont work
Run Code Online (Sandbox Code Playgroud)
FWIW:以下是人们可能期望的工作:
var
SomeForm: TSomeForm;
variable1: string;
implementation
{$R *.dfm}
{ TSomeForm }
procedure TSomeForm.FormCreate(Sender: TObject);
begin
Assert(SomeUnit.variable1 = '');
SetNewVersion('1');
Assert(SomeUnit.variable1 = '1');
end;
procedure TSomeForm.SetNewVersion(variable1: string);
begin
SomeUnit.variable1 := variable1;
end;
Run Code Online (Sandbox Code Playgroud)
为了避免这些问题,你可以考虑在参数前加上'A',这是Delphi中的一种半标准.当你在它时,创建字符串参数const:
procedure TSomeForm.SetNewVersion(const AVariable1: string);
begin
variable1 := AVariable1;
end;
Run Code Online (Sandbox Code Playgroud)
您可以通过以下任一方式解决问题:
Value作为setter方法的参数.要么,SomeUnit.variable1.需要注意的是赋值运算符是:=和不是=.
我强烈建议您重新考虑设计.
变量真的应该是全局变量吗?如果它与您的setter隐含的表单实例相关联,则它不应该是表单类的私有成员变量.
如果变量确实在实例之间共享,则将变量设为私有类变量,将setter设置为类方法.
如果您的Delphi没有类变量,那么将全局变量移动到实现部分.正如您的代码所代表的那样,拥有setter是没有意义的,因为您还在接口部分公开了支持变量.