레코드를 초기화하는 기본 방법은 무엇입니까? 는 '공장 기능'으로Delphi : 레코드 생성자 대 팩토리 함수
:
TMyRecord = record
valueX: integer;
valueY: integer;
end;
function MyRecord(const AValueX, AValueY: integer): TMyRecord;
begin
result.valueX := AValueX;
result.valueY := AValueY;
end;
var
myrec: TMyRecord;
begin
myrec := MyRecord(1, 2);
end;
또는 생성자 :
TMyRecord = record
valueX: integer;
valueY: integer;
constructor Create(const AValueX, AValueY: integer);
end;
constructor TMyRecord.Create(const AValueX, AValueY: integer);
begin
self.valueX := AValueX;
self.valueY := AValueY;
end;
var
myrec: TMyRecord;
begin
myrec := TMyRecord.Create(1, 2);
end;
내가 생성자 일을 더 캡슐화 있다고 생각하지만, 코드를 읽을 때 쉽게 혼동 할 수 있습니다. 그것은 무료 전화가없는 수업처럼 보이게합니다. 입력하는 것이 더 많습니다 ...
왜 다른 것을 선호합니까?
또한 레코드 생성자를 사용합니다. 원하는 경우 "작성"과 다른 이름을 지정할 수 있으므로 레코드라는 것을 알 수 있습니다. –
FYI 언급 한 내부 오류 문제가 D2010에서 수정 된 것으로 보입니다. –
질문은 단지 방법이 아니라 생성자에 관한 것입니다. 생성자에 대해 동일한 표기법을 따르는 경우 레코드가 클래스인지 인스턴스인지를 코드에서 이해하기가 어렵습니다. 클래스의 경우 메모리 누수를 의미하므로 코드를 본 사람은 실제로 레코드 또는 클래스인지 확인해야합니다. 그래서 나는 그것이 나쁜 길이다라고 생각한다. –