大卫·赫弗南已经说的那样:你在做什么是一个丑陋黑客,并不是很干净。他也给了暗示:将您的数字字段到一个记录:
type
TParams = class
public
Defined: Boolean;
Numbers: record
A0: Single;
A1: Single;
H1: TPoint;
A100: Single;
end;
procedure Reset;
end;
现在,它是非常简单的,你可以Reset
通过执行以下操作:
procedure TParams.Reset;
begin
FillChar(Numbers, SizeOf(Numbers), 0);
end;
一个简单的测试:
procedure Test;
var
P: TParams;
begin
P := TParams.Create;
try
Writeln(Format('%f %f (%d, %d) %f', [P.Numbers.A0, P.Numbers.A1, P.Numbers.H1.X, P.Numbers.H1.Y, P.Numbers.A100]));
P.Numbers.A0 := 1.0;
P.Numbers.A1 := 2.0;
P.Numbers.H1 := Point(11, 22);
P.Numbers.A100 := 77.0;
Writeln(Format('%f %f (%d, %d) %f', [P.Numbers.A0, P.Numbers.A1, P.Numbers.H1.X, P.Numbers.H1.Y, P.Numbers.A100]));
P.Reset;
Writeln(Format('%f %f (%d, %d) %f', [P.Numbers.A0, P.Numbers.A1, P.Numbers.H1.X, P.Numbers.H1.Y, P.Numbers.A100]));
finally
P.Free;
end;
end;
这产生以下输出:
0.00 0.00 (0, 0) 0.00
1.00 2.00 (11, 22) 77.00
0.00 0.00 (0, 0) 0.00
或者,你可以做到以下几点:
TNumbers = record
A0: Single;
A1: Single;
H1: TPoint;
A100: Single;
end;
TParams = class
public
Defined: Boolean;
Numbers: TNumbers;
procedure Reset;
end;
对于那些与仿制药版本(我知道你是用Delphi 7,它没有仿制药,但无论如何,替他人),这将简化Reset
一点:
procedure TParams.Reset;
begin
Numbers := Default(TNumbers);
end;
Default
的优点是,它会正常完成并初始化记录,以防万一它在它管理的类型(字符串,接口等)。
将所有字段放入记录并将记录置零。不要像这样使用丑陋的黑客。 –
清零不会最终确定任何“受管理”成员。如果只有数字字段,则零化无误。 –