Class — различия между версиями
Korvin (обсуждение | вклад) м («Gide:Class» переименована в «Class»: Отмена пространств имен) |
Korvin (обсуждение | вклад) м (→getStaticMethod) |
||
Строка 83: | Строка 83: | ||
Пример использования: | Пример использования: | ||
<source lang="kpp"> | <source lang="kpp"> | ||
− | var c = System.getClass( | + | var c = System.getClass('std/int').getStaticMethod('random'); |
var rnd = c(); | var rnd = c(); | ||
</source> | </source> | ||
В вышеприведенном примере, с помощью класса <tt>[[System|System]]</tt>, мы получаем класс <tt>[[int|int]]</tt> и создаем объект, соответствующий статическому методу <tt>random</tt>. Объект метода сохраняется в переменной ''c''. Обращаясь к этой переменной как к функции, мы неявным образом вызываем сам метод. | В вышеприведенном примере, с помощью класса <tt>[[System|System]]</tt>, мы получаем класс <tt>[[int|int]]</tt> и создаем объект, соответствующий статическому методу <tt>random</tt>. Объект метода сохраняется в переменной ''c''. Обращаясь к этой переменной как к функции, мы неявным образом вызываем сам метод. |
Версия 21:35, 12 апреля 2008
Основной задачей класса Class является предоставление механизма рефлексии. Сущность его заключается в том, что программист может получить инетресующую его информацию о классах и объектах прямо по ходу выполнения программы. В то время как класс Object ставит своей задачей управление собственно объектами, то есть инстанциями классов, класс Class используется для управления самими классами от которых были порождены соответствующие объекты. Ирония заключается в том что инстанции класса Class, будучи потомками класса Object, сами представляют классы.
Родители: Object
Методы: == <> name parents childOf managed inspect hasStaticMethod getStaticMethod
Статические методы: нет
оператор ==
operator == (объект сравнения: динамическая переменная)
Возвращает: логическое значение
Метод используется для сравнения классов. Возвращает истину в том случае когда текущий объект и передный параметр — это один и тот же класс. Пример:
<source lang="kpp"> var x = (5.class == 6.class); //значение: истина var x = ('5'.class == 6.class); //значение: ложь </source>
оператор <>
operator == (объект сравнения: динамическая переменная)
Возвращает: логическое значение
Инверсия оператора "==".
Примечание: В языке К++ используется форма "!=".
name
Возвращает: string
Метод возвращает имя класса. Эквивалент Object:className.
parents
Метод возвращает массив имен классов-родителей.
Примечание: Результирующий массив создается по требованию при каждом вызове метода. Поэтому, при необходимости итерирования следует сначала сохранить полученный массив в переменную, а затем работать уже с ней: <source lang="kpp"> var my = new MyClass; const parents = my.class.parents; for (var i = 0 ; i < parents.size; i++)
//обработка полученных данных
</source>
childOf
childOf(имя класса: string)
Возвращает: логическое значение
Проверяет, унаследован ли текущий класс от указанного класса.
managed
Возвращает: логическое значение
Проверяет, является ли текущий класс управляемым или нет.
inspect
Возвращает: string
Возвращает информацию о классе. См. также Object:inspect.
hasStaticMethod
hasStaticMethod(имя статического метода: string)
Возвращает: логическое значение
Проверяет, имеет ли класс указанный статический метод.
getStaticMethod
getStaticMethod(имя статического метода: string)
Возвращает: Method
Данный метод возвращает статический метод класса в виде объекта. Впоследствии, этот объект может использоваться для удаленного вызова метода, либо для получения дополнительной информации. При попытке получения несуществующего метода будет возбуждено исключение ENotFound.
Пример использования: <source lang="kpp"> var c = System.getClass('std/int').getStaticMethod('random'); var rnd = c(); </source>
В вышеприведенном примере, с помощью класса System, мы получаем класс int и создаем объект, соответствующий статическому методу random. Объект метода сохраняется в переменной c. Обращаясь к этой переменной как к функции, мы неявным образом вызываем сам метод.