Delphi 全局变量 setter
Delphi global variable setter
我在 Delphi 单元中设置全局变量时遇到问题:
unit SomeUnit;
...
interface
...
var
variable1: String;
...
implementation
procedure TSomeForm.SetNewVersion(variable1: String);
begin
variable1 := variable1; //here is problem
end;
如果全局变量与过程中的局部参数值同名,如何给全局变量赋值?如果这是某种形式的价值,那可以这样做:
TSomeForm.variable1 = variable1;
但问题是什么时候variable是unit中的全局变量?
SomeUnit.variable1 = variable1; // this dont work
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;
为避免此类问题,您可以考虑在参数前加上 'A' 前缀,这是 Delphi 中的一种半标准。当你在做的时候,制作字符串参数 const
:
procedure TSomeForm.SetNewVersion(const AVariable1: string);
begin
variable1 := AVariable1;
end;
您可以通过以下任一方式解决您的问题:
- 为参数(或全局变量)选择不同的名称。我个人倾向于使用名称
Value
作为 setter 方法的参数。或者,
- 像这样完全限定名称
SomeUnit.variable1
。
注意赋值运算符是:=
而不是=
。
我强烈建议您重新考虑设计。
变量真的应该是全局的吗?如果它与您的 setter 暗示的表单实例相关联,它不应该是表单 class 的私有成员变量。
如果变量确实在实例之间共享,请将变量设为私有 class 变量,将 setter 设为 class 方法。
如果您的 Delphi 没有 class 变量,则将全局变量移动到实现部分。正如您的代码所代表的那样, setter 没有意义,因为您还在接口部分公开了支持变量。
我在 Delphi 单元中设置全局变量时遇到问题:
unit SomeUnit;
...
interface
...
var
variable1: String;
...
implementation
procedure TSomeForm.SetNewVersion(variable1: String);
begin
variable1 := variable1; //here is problem
end;
如果全局变量与过程中的局部参数值同名,如何给全局变量赋值?如果这是某种形式的价值,那可以这样做:
TSomeForm.variable1 = variable1;
但问题是什么时候variable是unit中的全局变量?
SomeUnit.variable1 = variable1; // this dont work
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;
为避免此类问题,您可以考虑在参数前加上 'A' 前缀,这是 Delphi 中的一种半标准。当你在做的时候,制作字符串参数 const
:
procedure TSomeForm.SetNewVersion(const AVariable1: string);
begin
variable1 := AVariable1;
end;
您可以通过以下任一方式解决您的问题:
- 为参数(或全局变量)选择不同的名称。我个人倾向于使用名称
Value
作为 setter 方法的参数。或者, - 像这样完全限定名称
SomeUnit.variable1
。
注意赋值运算符是:=
而不是=
。
我强烈建议您重新考虑设计。
变量真的应该是全局的吗?如果它与您的 setter 暗示的表单实例相关联,它不应该是表单 class 的私有成员变量。
如果变量确实在实例之间共享,请将变量设为私有 class 变量,将 setter 设为 class 方法。
如果您的 Delphi 没有 class 变量,则将全局变量移动到实现部分。正如您的代码所代表的那样, setter 没有意义,因为您还在接口部分公开了支持变量。