Поля

Поле - это член класса, который представляет переменную ассоциированную с объектом или классом.

Когда определение поля содержит модификатор Shared такое поле называется статическим. Когда модификатора Shared нет в определении поля оно называется экземплярным. Статические и экземплярные поля являются двумя разными видами переменных.

Статическое поле не является частью определенного экземпляра, наоборот, оно идентифицирует ровно одну ячейку памяти. Вне зависимости от того какое количество экземпляров класса создано существует только одна копия статического поля в домене приложения.

Экземплярное поле относится к определенному экземпляру. Каждый экземпляр класса содержит отдельный набор всех экземплярных полей данного класса.

Пример

Class SharedField
    //Статическое поле
    Shared Public a: string;
    //Экземплярное поле
    Public b: string;
End Class;

Sub Test();
Var
    Obj: SharedField = New SharedField();
Begin
    SharedField.a := "Class";
    Obj.b := "Object";
End Sub;

В случае если определение поля содержит модификатор ReadOnly, то такое поле называется полем только для чтения. Присваивание значения полю только для  чтения может происходить только в определении данного поля, либо конструкторе класса (в статическом или экземплярном в зависимости от типа поля).

Попытка присвоение значения полю только для чтения, либо передача его в качестве параметра передаваемого по ссылке или выходного параметра в любом другом контексте приводит к ошибке компиляции.

Пример

Class ReadonlyField
    
Readonly Public Ver: string;
    
Readonly Public Id: string;
    
    
Public Constructor ReadonlyField();
    
Begin
        Ver := 
"1.0.0";
        Id := 
"ReadonlyField";
    
End Constructor;
End Class;

Sub Test();
Var
    Obj: ReadonlyField = 
New ReadonlyField();
    s: string;
Begin
    s := Obj.Id + 
" " + Obj.Ver;
End Sub;

См. также:

Классы | Свойства