데이비드 헤퍼 넌 이미 말했다 : 당신이하고있는 것은 추악한 해킹하고 매우 깨끗하지는 않습니다. 그것은, 당신은 수행하여 Reset
매우 간단 다음 수 있습니다 지금
type
TParams = class
public
Defined: Boolean;
Numbers: record
A0: Single;
A1: Single;
H1: TPoint;
A100: Single;
end;
procedure Reset;
end;
:
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
제네릭 버전 (난 당신이 다른 사람을 위해, 어쨌든에는 제네릭이 없습니다 델파이 7을 사용하지만 알고), 그 뜻에 사람들을 위해
TNumbers = record
A0: Single;
A1: Single;
H1: TPoint;
A100: Single;
end;
TParams = class
public
Defined: Boolean;
Numbers: TNumbers;
procedure Reset;
end;
:
다른 방법으로는 다음과 같은 작업을 수행 할 수 Reset
조금 단순화 :
procedure TParams.Reset;
begin
Numbers := Default(TNumbers);
end;
Default
가 제대로 대비해 그것의 유형 (문자열 인터페이스 등)를 관리하고, 완료하고 레코드를 초기화한다 이점을 갖는다.
모든 필드를 레코드에 넣고 레코드를 0으로 설정하십시오. 이런 추한 해킹을 사용하지 마십시오. –
Zeroizing은 "관리되는"멤버를 확정하지 않습니다. 숫자 필드 만있는 경우 0으로 설정하면됩니다. –