img

Ссылки на объекты

Создание ссылок позволяет создавать несколько переменных, которые будут указывать на один физический объект, находящийся в памяти. Использование ссылок для примитивных типов запрещено и предназначено для работы с объектами, создаваемыми пользователем.

Для создания ссылки используются следующий синтаксис: позьзовательский_тип@ идентификатор_ссылки

 class MyObject { private int i; int getValue() { return i; } MyObject(int i) { this.i = i; } } // main function, calling every tick int Run() { MyObject obj(10); MyObject@ obj_h; @obj_h = obj; System.Print("obj.getValue()="+obj.getValue()); System.Print("obj_h.getValue()="+obj_h.getValue()); return(0); } 

Результат:

 obj.getValue()=10; obj_h.getValue()=10; 

Для проверки того, указывают ссылки на один и тот же объект или нет, можно воспользоваться оператором is следующим образом:

 class MyObject { private int i; int getValue() { return i; } MyObject(int i) { this.i = i; } } int Run() { MyObject obj1(10); MyObject@ objX_h; MyObject@ objY_h; @objX_h = obj1; @objY_h = obj1; if(objX_h is objY_h) System.Print("objX_h and objY_h point to the same object"); else System.Print("objX_h and objY_h point to different objects"); MyObject obj2(10); @objY_h = obj2; if(objX_h is objY_h) System.Print("objX_h and objY_h point to the same object"); else System.Print("objX_h and objY_h point to different objects"); return(0); } 

Время жизни объектов обычно ограничено временем выполнения того блока кода, в котором они объявлены. Однако, если на объект создается ссылка, которая используются вне этого блока, объект продолжает существовать, пока ссылке не будет присвоено null или завершится выполнения блока кода, где используется эта ссылка.