Tôi nghi ngờ rằng tôi không thể giải quyết được. Tôi đã đọc tài liệu tại embarcadero cho class constructors nhưng tôi không thể hiểu được ý nghĩa của điều đó. Nói cách khác, chênh lệch sử dụng giữa một số constructor
và class constructor
là gì? Tôi đã làm điều này:Hàm tạo và hàm tạo lớp Delphi
type
TGeneric<T> = class
private
FValue: T;
aboutString: string;
procedure setValue(const a: T);
public
property V: T read FValue write setValue;
property about: string read aboutString;
constructor Create;
destructor Destroy; override;
end;
implementation
{ TGeneric<T> }
constructor TGeneric<T>.Create;
begin
inherited;
aboutString := 'test';
end;
Thay vì mã này không hoạt động đúng:
type
TGeneric<T> = class
private
FValue: T;
aboutString: string;
procedure setValue(const a: T);
public
property V: T read FValue write setValue;
property about: string read aboutString;
class constructor Create;
destructor Destroy; override;
end;
implementation
{ TGeneric<T> }
class constructor TGeneric<T>.Create;
begin
inherited;
aboutString := 'test';
end;
Tôi đoán rằng câu trả lời là trong dòng này của tài liệu:
Thông thường, constructor của lớp cha là được sử dụng để khởi tạo các trường tĩnh của lớp hoặc để thực hiện một kiểu khởi tạo, được yêu cầu trước khi lớp hoặc bất kỳ cá thể lớp nào hoạt động đúng.
Nói cho tôi biết nếu tôi đúng:
- Constructor: Tôi có thể sử dụng
inherited Create;
, khởi tạo các biến và vân vân. - Nhà xây dựng lớp: Tôi có thể sử dụng điều này khi tôi phải tạo đối tượng trong lớp học ngay lập tức?
Ví dụ nhìn vào bên dưới:
type
TBox = class
private
class var FList: TList<Integer>;
class constructor Create;
end;
implementation
class constructor TBox.Create;
begin
{ Initialize the static FList member }
FList := TList<Integer>.Create();
end;
end.
Ở đây tôi sẽ để tạo ra các đối tượng ngay lập tức khi tôi gọi TBox.Create
theo hình thức chính?
Hãy nghĩ đến các nhà xây dựng lớp học như một cách để tự động khởi tạo loại lớp học của bạn. Chúng được tự động gọi khi khởi động và bạn sẽ không bao giờ gọi chúng bằng mã của bạn. Nói cách khác, các hàm tạo lớp hoạt động trên kiểu, trong khi các hàm tạo bình thường hoạt động trên các biến của bạn. –
Vì vậy, tôi có thể tránh điều đó và chỉ quan tâm đến nhà xây dựng cổ điển? –
Điều đó tùy thuộc vào những gì bạn muốn làm. Một lớp var là một loại biến toàn cục cho kiểu đó và có thể hữu ích trong một số trường hợp. –