私は解決できない疑いがあります。私はclass constructorsのembarcaderoのドキュメントを読んだことがありますが、その意味を理解することはできません。言い換えれば、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;
私は答えは文書のこの行であることを推測する:クラスのコンストラクタがある
通常、クラスの静的フィールド を初期化するか、初期化のタイプを実行するために使用されます。クラスまたはインスタンスが正しく機能するには、 が必要です。
私は正しい午前なら、私に教える:
- コンストラクタ:私はそうで、
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は、その型のグローバル変数の一種であり、場合によっては有益なこともあります。 –