S
和F
的以下声明之间的区别是什么?
type
TMyClass = class(TObject)
private
S: String;
private var
F: String;
end;
我问的原因是因为我可以像S
一样使用F
(不添加var
关键字)。
他们的待遇是否不同?
答案 0 :(得分:13)
完全没有区别。根据{{3}}:
var关键字是可选的。但是,如果没有使用,则全部 字段声明必须在任何属性或方法之前发生 声明。在任何属性或方法声明之后,var可以 用于引入任何其他字段声明。
答案 1 :(得分: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;
在第二种情况(var
)中需要FSomeOtherField
字段来指示编译器现在进行一系列字段声明,但在第一种情况下,由于历史原因不需要它,因为在第一个Delphi版本,您可以声明Fields,并且不支持嵌套类型或常量。