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

Возвращение ссылки на объект

Иногда вы можете управлять объектом посредством одной или более ссылок на объект. Например, приведенная ниже программа описывает класс, создает объект на его основе и возвращает ссылку на этот объект:

  CopyCode imageСкопировать код
*--NEWINV.PRG
*--возвращает ссылку на новую форму инвойса.
frmInv = CREATEOBJECT("InvoiceForm")
RETURN frmInv
 
DEFINE CLASS InvoiceForm AS FORM
   ADD OBJECT txtCompany AS TEXTBOX
   * код для установки свойств, ввода других объектов и томк подобного
ENDDEFINE

Приведенная ниже программа устанавливает ссылку на объект, созданный в Newinv.prg. Переменная ссылки может быть столь же управляемой и в той же самой степени, что и объект:

  CopyCode imageСкопировать код
frmInvoice = NewInv() && сохраняет объекьную ссылку в переменной
frmInvoice.SHOW

Кроме того, вы можете создать ссылку на объект на форме, как это показано на примере ниже:

  CopyCode imageСкопировать код
txtCustName = frmInvoice.txtCompany
txtCustName.Value = "Fox User"
NoteСовет

После того, как вы создали объекь, вы можете использовать команду DISPLAY OBJECTS, для отображения иерархии класса, установок свойств, содержащихся объектов и доступных методов и событий. Вы можете заполнить массив свойствами (не установками свойств, а именами свойств) событиями, методами и содержащимися внутри объекта другими объектами в помощью функции AMEMBERS().

Высвобождение объектов и ссылок из памяти

Если существует ссылка на объект, высвобождение объекта не удаляет объект из памяти. Например, приведенная ниже команда освобождает frmInvoice, оригинальный объект:

  CopyCode imageСкопировать код
RELEASE frmInvoice

Однако, поскольку ссылка на объект, принадлежащий frmInvoice продолжает существовать, объект не удаляется из памяти до тех пор, пока txtCustName не будет высвобожден приведенной ниже командой:

  CopyCode imageСкопировать код
RELEASE txtCustName

Проверка существования объекта

Вы можете использовать функции TYPE( ), ISNULL( ) и VARTYPE( ) для проверки существования объекта. Например, приведенные ниже строки кода проверяют - существует ли объект с именем oConnection:

  CopyCode imageСкопировать код
IF TYPE("oConnection") = "O" AND NOT ISNULL(oConnection)
   * объект существует
ELSE
   * объект не существует
ENDIF
NoteЗамечание

ISNULL() является необходимой, так как .NULL. сохраняется в переменной объекта формы, когда ползователь закрывает форму, но тип переменной остается типом "объект" - "O".

Смотрите также