1

クラスコンストラクターでクラスを作成しています

TStaticDynSettings = class
public
  class constructor create;
  class destructor destroy;
  class procedure Reload;
end;

create と destroy 以外のクラス内の他のすべてのメソッドは、クラス メソッドである必要がありますか?

すべての変数がクラス var である必要があることは確かです。それ以外の場合、自動初期化は機能しません。

プロシージャを次のように呼び出すことの違いは何ですか?..

var StDyn : TStaticDynSettings;`
StDyn.Reload;

TStaticDynSettings.Reload;

4

1 に答える 1

3

1 - のオブジェクト インスタンスを作成する予定がない場合は、TStaticDynSettings次の 3 つの形式のいずれかを使用できます。

type
  TStaticDynSettings = class
  public
    procedure Reload1;
    class procedure Reload2;
    class procedure Reload3; static;
  end;

呼び出しの例:

procedure Call1;
var Instance: TStaticDynSettings;

begin
  Instance.Reload1;
end;

procedure Call2;
begin
  TStaticDynSettings.Reload2;
end;

procedure Call3;
begin
  TStaticDynSettings.Reload3;
end;

違いは、隠し引数がReload1Reload2メソッドに渡され、 に渡されないことReload3です。

隠し引数は、オブジェクトインスタンスへの参照でありReload1(オブジェクトインスタンスを作成していないため使用されません)、クラス参照ですReload2(コンパイル時にクラス参照が既知であると仮定すると、おそらく不要です)。

最初の形式 ( Reload1) は、オブジェクト参照の使用を想定しているため、誤解を招く可能性があるため、回避する必要があります (ただし、機能します)。

Reload3コンパイル時に不明なクラス参照を使用しない場合は、3 番目の形式 ( ) を使用することをお勧めします。

2 - 違いはありません (最初のケースの場合、不要なオブジェクト変数を使用するオーバーヘッドはカウントされません)。

于 2013-01-02T08:15:51.560 に答える