Специальные методы - это методы, объявленные в классах, чьи имена начинаются с символа подчеркивания, и которые вызываются интерпретатором в некоторых специфических ситуациях.
_init
special method
_exit
special method
_new
special method
_free
special method
_next
special method
_get
special method
_put
special method
_call
special method
_unknown
special method
_init
special
method
Метод _init
вызывается, когда класс загружен
интерпретатором. Он должен объявляться следующим образом :
GB_STATIC_METHOD ( "_init" , NULL , MyClass_init , NULL )
Используйте этот метод для выполнения специфической инициализации класса.
_exit
special
method Метод _exit
вызывается, когда класс выгружен
интерпретатором. Он должен объявляться следующим образом :
GB_STATIC_METHOD ( "_exit" , NULL , MyClass_exit , NULL )
Используйте этот метод для выполнения специфической очистки
класса.
_new
special
method Метод _new
вызвается, когда новый объект этого класса
создан.Он должен объявляться следующим образом :
GB_METHOD ( "_new" , NULL , MyClass_new , parameters
)
Этот метод может получать любые параметры, какие хотите, и ничего не
возвращать. Параметры _new
придут из параметров оператора
NEW .
Используйте этот метод для инициализации вновь созданного объекта. Заметьте, что все поля структуры объекта установлены в ноль.
_free
special
method Метод _free
вызыватеся, когда новый объект этого
класса разрушается (destroyed). Он должен объявляться следующим образом
:
GB_METHOD ( "_free" , NULL , MyClass_free , NULL )
Этот метод не принимает параметров и ничего не возвращает.
Используйте этот метод для очистки объекта. Например, если структура объекта содержит ссылки на строки или объекты, вы должны освободить их, иначе вы создадите утечку памяти.
_next
special
method Метод _next
вызывается, когда программа Gambas
использует инструкцию FOR EACH ... IN
для перечисления объекта. Он должен объявляться следующим образом
:
GB_METHOD ( "_next" , return type , MyClass_next ,
NULL )
Или так :
GB_STATIC_METHOD ( "_next" , return type ,
MyClass_next , NULL )
Метод не принимает парамтры, но может возвращать перечисленные данные.
Этот метод может быть статическим. Тогда класс будет перечисляемым, но не объект.
Этот метод может ничего не возвращать. Тогда вы будете перечислять
объект с помощью инструкции FOR EACH
без части IN
.
Внутри реализации метода _next
вы будете использовать
некоторые специфические функции интерфейса программирования Gambas :
GB.GetEnum
даст вам
указатель на буфер перечисления. Используйте этот буфер для хранения
состояния перечисления. Вы можете хранить до 12 байт в этом буфере.
Заметьте, что буфер инициализируется нулями при начале перечисления, так что вы можете обнаружить это особое состояние.
Когда достигается конец перечисления, используйте функцию GB.StopEnum
, чтобы сказать это интерпретатору, и немедленно вернуться из
реализации функции.
_get
special
method Метод _get
вызывается, когда [ ]
оператор используется на объекте или классе для извлечения данных. Он
должен объявляться следующим образом :
GB_METHOD ( "_get" , return type , MyClass_get , parameters
)
Или так :
GB_STATIC_METHOD ( "_get" , return type ,
MyClass_get , parameters )
Метод может быть статическим. Тогда [ ]
оператор будет
должен использоваться на классе, не на объекте.
Метод можте принять любые параметры. Эти параметры будут преданы
между [
и
]
операторами. Например, инструкция Val =
MyObject[X, Y]
приведет к вызову _get
с X
и Y
в качестве параметров.
Этот метод должен возвращать данные, извлеченные из объекта или класса.
_put
special
method Метод _put
вызывается, когда [ ]
оператор используется на объекте или классе для вставки данных в них.
Он должен объявляться следующим образом :
GB_METHOD ( "_put" , NULL , MyClass_put , parameters
)
Или так :
GB_STATIC_METHOD ( "_put" , NULL , MyClass_put , parameters
)
Метод может быть статическим. Тогда [ ]
оператор будет
должен использоваться на классе, но не объекте.
Метод может принять любые параметры. Эти параметры будут значением
для вставки в объект, и те, что передадутся между [
и ]
операторами. Например, инструкция
MyObject[X, Y] = Val
приведет к вызову _put
с Val
, X
и Y
в качестве
параметров.
Этот метод ничего не возвращает.
_call
special
method Метод _call
вызывается, когда класс или объект
используются как функция. Он должен объявляться следующим образом :
GB_METHOD ( "_call" , return type , MyClass_call ,
parameters )
Или так :
GB_METHOD ( "_call" , return type , MyClass_call ,
parameters )
Этот метод может быть статическим. Тогда класс будет способен использоваться как функция, но не объект.
Этот метод может принимать любые параметры, и ничего не возвращает.
Класс Message
компонента gb.qt
- это хороший пример использования этой
особенности.
_unknown
special method Метод _unknown
вызывается, когда интерпретатор не
находит символа метода или свойства в объявлении классеа. Он должен
объявляться следующим образом :
GB_METHOD ( "_unknown" , "v" , MyClass_unknown , "." )
Этот метод принимает переменное количество аргументов и возвращает
значение Variant
.
Внутри реализации функции :
GB.IsProperty
функция скажет вам, если неизвестный символ был использован как
свойство или как метод.
GB.GetUnknown
функция вернет имя неизвестного символа.
GB.NParam
функция
вернет количество аргументов, переданных функции.
Класс Application
компонента gb.qt.kde
- хороший пример использования этой
особенности : когда вы делаете вызов DCOP, интерпретатор не знает,
загружено ли приложение, существует ли метод, каковы его параметры и
т.д. Так что, специальный метод _unknown
, добро
пожаловать !