У меня есть сомнения, что я не могу решить. Я прочитал документацию на embarcadero за class constructors, но я не могу понять смысл этого. Другими словами, какова разница в использовании между constructor
и class constructor
? Я сделал это:Конструктор и конструктор 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;
Вместо этого код не работает должным образом:
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;
Я думаю, что ответ находится в этой строке документации:
Обычно, класс Конструкторы используется для инициализации статических полей класса или для выполнения типа инициализации, который требуется , прежде чем класс или любой экземпляр класса могут нормально функционировать.
Скажите мне, если я правильно:
- Constructor: Я могу использовать
inherited Create;
, инициализировать переменные и так далее. - Конструктор классов: Я могу использовать это, когда мне нужно немедленно создать объект в моем классе?
Например смотрите на ниже:
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.
Здесь я собираюсь немедленно создать объект, когда я называю TBox.Create
в главной форме?
Подумайте о конструкторах классов, чтобы автоматически инициировать тип вашего класса. Они автоматически вызываются при запуске, и вы никогда не должны называть их своим кодом. Другими словами, конструкторы классов работают над типом, в то время как обычные конструкторы работают с вашими переменными. –
Так что я могу избежать этого и заботиться только о классическом конструкторе? –
Это зависит от того, что вы хотите сделать. Класс var является своего рода глобальной переменной для этого типа и может быть полезен в некоторых случаях. –