Переменные представляют места в памяти, используемые для хранения данных. Каждая переменная имеет тип, который определяет какие значения могут быть сохранены в переменной. Язык Fore.NET является типо-безопасным и компилятор гарантирует что значения, хранящиеся в переменных, всегда имеют соответствующий тип. Значение переменной может быть изменено посредством присваивания нового значения.
Переменная должна быть обязательно определена перед своим использованием.
Язык Fore.NET определяет семь категорий переменных: статические переменные, экземплярные переменные, элементы массивов, параметры передаваемые по значению, параметры передаваемые по ссылке, выходные параметры и локальные переменные.
Статические переменные. Поле определенное с модификатором Shared называется статической переменной. Статическая переменная начинает свое существование перед выполнением статического конструктора содержащего её типа и прекращает свое существование при завершении существования домена приложения, в котором она была создана.
Экземплярные переменные. Поле определенное без модификатора Shared называется экземплярной переменной. Экземплярная переменная класса начинает свое существование когда создается новый экземпляр данного класса и прекращает свое существование когда на данный экземпляр не остается ссылок. Начальным значением экземплярной переменной класса является значение по умолчанию для ее типа. Экземплярная переменная структуры имеет точно такой же жизненный цикл как и сама структура. Экземплярная переменная структуры определена в том случае, если определена структура ее содержащая.
Элементы массивов. Элементы массива начинают свое существование когда создается экземпляр массива и прекращают свое существование когда на данный экземпляр не остается ссылок. Начальным значением элементов массива является значение по умолчанию для типа элементов массива.
Параметры, передаваемые по значению. Параметр метода определенный без модификаторов Var и Out называется параметром, передаваемым по значению. Параметр, передаваемый по значению, начинает свое существование при вызове метода к которому он принадлежит и инициализируется значением аргумента, переданным при вызове. Свое существование он прекращает при возврате из метода.
Параметры, передаваемые по ссылке. Параметр метода определенный с модификатором Var называется параметром, передаваемым по ссылке. Параметр, передаваемый по ссылке, не создает новой ячейки памяти. Вместо этого он представляет место в памяти выделенное для хранения переменной, которая была передана в качестве аргумента при вызове метода. Таким образом значение параметра, передаваемого по ссылке, всегда совпадает со значением этой переменной. Внутри экземплярных методов структур (в том числе методов доступа свойств) ключевое слово Self ведет себя точно таким же образом, как и параметр передаваемый по ссылке.
Выходные параметры. Параметр метода определенный с модификатором Out называется выходным параметром. Выходной параметр не создает новой ячейки памяти. Вместо этого он представляет место в памяти выделенное для хранения переменной, которая была передана в качестве аргумента при вызове метода. Таким образом значение выходного параметра всегда совпадает со значением этой переменной. Значение выходного параметра изначально не определено. Оно должно быть определено до возврата из функции. Внутри экземплярных методов структур (в том числе методов доступа свойств) ключевое слово Self ведет себя точно таким же образом, как и параметр передаваемый по ссылке.
Локальные переменные. Локальные переменные определяются в блоке определения локальных переменных в функциональных членах. Локальная переменная начинает свое существование перед началом выполнения метода, в котором она определена, и прекращает свое существование при возврате из метода. Ячейка памяти, занимаемая локальной переменной, освобождается независимо от жизненного цикла переменной.
Следующие категории переменных автоматически инициализируются значениями по умолчанию:
Статические переменные.
Экземплярные переменные экземпляров классов.
Элементы массивов.
Значение по умолчанию для переменной зависит от её типа и определяется следующим образом:
Если переменная имеет размерный тип, то её значение по умолчанию соответствует значению по умолчанию для данного типа (0 для Integer, 0.0 для Double, False для Boolean и так далее).
Если переменная имеет ссылочный тип, то её значение по умолчанию равно Null.
Namespace UserApplicaton
//Переменные, доступные во всей сборке
Var
GlobalValue: double;
GlobalObject: object;
Public Class UserObject
//Статическая переменная со значением по умолчанию
Shared Options: integer = 10;
//Экземплярная переменная
ObjectValues: array Of double;
Public
Constructor UserObject();
Begin
ObjectValues := New Double[Options]
End Constructor UserObject;
//Параметр i передается по значению
Public Property Item[i: integer]: double
Get
Begin
//Получение значения элемента массива
Return ObjectValues[i];
End Get
Set
Begin
//Установка значения для элемента массива
ObjectValues[i] := Value;
End Set
End Property Item;
//Параметр Summ передается по ссылке
Sub SummElement(Var Summ: Double);
//Локальные переменные, доступные только в процедуре
Var
d, d1: integer;
Begin
For Each d In ObjectValues Do
d1 := d1 + d;
End For;
Summ := d1;
End Sub;
End Class UserObject;
End Namespace;
См. также: