"var"对字段声明有什么区别?

9 delphi syntax

以下声明S和之间的区别是什么F

type
  TMyClass = class(TObject)
  private
    S: String;
  private var
    F: String;
  end;
Run Code Online (Sandbox Code Playgroud)

我问的原因是因为我可以使用S相同的方式F(不添加var关键字).

他们的待遇不同吗?

And*_*and 13

完全没有区别.根据文件:

var关键字是可选的.但是,如果未使用它,则所有字段声明必须在任何属性或方法声明之前发生.在任何属性或方法声明之后,var可用于引入任何其他字段声明.


jac*_*ate 12

它们都是具有相同可见性的Fields.

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;
Run Code Online (Sandbox Code Playgroud)

var在第二种情况(FSomeOtherField)中需要该字段来指示编译器现在出现一系列字段声明,但在第一种情况下,由于历史原因它不需要,因为在第一个Delphi版本中,您只能声明Fields而没有支持嵌套类型或常量.

  • "像常量或内部类型"应该读作"像方法,属性,常量或内部类型".虽然,在实践中,我从未见过*方法和属性之后的字段*... (2认同)