Vì vậy, cách thức ưu tiên để khởi tạo hồ sơ là gì?Delphi: Ghi lại hàm tạo và hàm nhà máy
Với một 'chức năng nhà máy':
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;
hoặc một constructor:
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;
Tôi cảm thấy rằng những điều constructor gói gọn hơn, nhưng nó làm cho nó dễ dàng để bị lẫn lộn khi đọc mã. Nó làm cho nó trông giống như một lớp học mà thiếu một cuộc gọi miễn phí. Nó cũng nhiều hơn để nhập ...
Tại sao bạn thích cái này hơn cái kia?
Tôi cũng sử dụng các nhà xây dựng bản ghi. Bạn có thể đặt tên cho nó một cái gì đó khác với "Tạo" nếu bạn thích, vì vậy bạn biết đó là một bản ghi. –
FYI Vấn đề lỗi nội bộ bạn đã đề cập dường như đã được sửa trong D2010. –
Câu hỏi là về hàm tạo, không chỉ là một phương thức. Nếu chúng ta sẽ làm theo cùng một ký hiệu cho hàm tạo thì rất khó để hiểu từ mã cho dù đó là bản ghi hay thể hiện của lớp. Đối với lớp, nó có nghĩa là rò rỉ bộ nhớ, vì vậy bất cứ ai thấy mã đó sẽ phải kiểm tra là nó thực sự ghi lại hoặc lớp. Vì vậy, tôi nghĩ rằng đó là cách xấu. –