9

S次のとの宣言の違いは何Fですか?

type
  TMyClass = class(TObject)
  private
    S: String;
  private var
    F: String;
  end;

私が尋ねている理由は、(キーワードを追加せずに)Sと同じ方法を使用できるためです。Fvar

彼らは異なって扱われますか?

4

2 に答える 2

13

まったく違いはありません。ドキュメントによると:

var キーワードはオプションです。ただし、これを使用しない場合、すべてのフィールド宣言は、プロパティまたはメソッドの宣言の前に行う必要があります。プロパティまたはメソッドの宣言の後に、var を使用して追加のフィールド宣言を導入できます。

于 2013-03-04T23:27:19.420 に答える
12

どちらも同じ可視性を持つフィールドです。

キーワードは、var他の宣言の後にフィールドを宣言するときに必要になることがあります (定数、内部型、またはメソッドやプロパティの後にさえも)。

例えば:

type
  TMyClass = class
  private
    FSomeField: string; //<--- this is a field, here you don't need the var clause
    const
      SOME_CONSTANT = 1;
      OTHER_CONSTANT = 2;  
    var //<---- here you need the var clause to start declaring fields
      FSomeOtherField: string; 
  end;

var2 番目のケース ( ) では、コンパイラに一連のフィールド宣言が来るように指示するためにフィールドが必要ですが、FSomeOtherField最初のケースでは、歴史的な理由から必要ありません。最初の Delphi バージョンでは、フィールドを宣言するだけで済み、フィールドがなかったからです。ネストされた型または定数のサポート。

于 2013-03-04T23:28:29.513 に答える