Class — различия между версиями
Korvin (обсуждение | вклад) м (Новая: Основной задачей класса <tt>Class</tt> является предоставление механизма рефлексии. Сущность его заключае...) |
Korvin (обсуждение | вклад) м (→getStaticMethod) |
||
(не показаны 9 промежуточных версий 2 участников) | |||
Строка 1: | Строка 1: | ||
− | Основной задачей класса <tt>Class</tt> является предоставление механизма рефлексии. Сущность его заключается в том, что программист может получить инетресующую его информацию о классах и объектах прямо по ходу выполнения программы. В то время как класс <tt>[[ | + | Основной задачей класса <tt>Class</tt> является предоставление механизма рефлексии. Сущность его заключается в том, что программист может получить инетресующую его информацию о классах и объектах прямо по ходу выполнения программы. В то время как класс <tt>[[Object]]</tt> ставит своей задачей управление собственно объектами, то есть инстанциями классов, класс <tt>Class</tt> используется для управления самими классами от которых были порождены соответствующие объекты. Ирония заключается в том что инстанции класса <tt>Class</tt>, будучи потомками класса <tt>[[Object]]</tt>, сами представляют классы. |
− | '''Родители''': <tt>[[ | + | '''Родители''': <tt>[[Object]]</tt> <br> |
− | '''Методы''': <tt> | + | '''Методы''': <tt>[[#name|name]] [[#parents|parents]] [[#childOf|childOf]] [[#managed|managed]] [[#inspect|inspect]] [[#hasStaticMethod|hasStaticMethod]] [[#getStaticMethod|getStaticMethod]]</tt><br> |
− | ''' | + | '''Реализует операторы''': |
+ | <tt>[[#оператор ==|==]]</tt>, | ||
+ | <tt>[[#оператор <>|<>]]</tt> | ||
__NOTOC__ | __NOTOC__ | ||
Строка 9: | Строка 11: | ||
== оператор == == | == оператор == == | ||
− | operator == (''объект сравнения | + | operator == (''объект сравнения'') <br> |
− | '''Возвращает''': [[ | + | '''Возвращает''': [[логическое значение]] <br> |
− | Метод используется для сравнения классов. Возвращает истину в том случае когда текущий объект и | + | Метод используется для сравнения классов. Возвращает истину в том случае когда текущий объект и переданный параметр — это один и тот же класс. Пример: |
<source lang="kpp"> | <source lang="kpp"> | ||
Строка 21: | Строка 23: | ||
== оператор <> == | == оператор <> == | ||
− | operator | + | operator <> (''объект сравнения'') <br> |
− | '''Возвращает''': [[ | + | '''Возвращает''': [[логическое значение]] <br> |
Инверсия оператора "<tt>[[#оператор ==|==]]</tt>". | Инверсия оператора "<tt>[[#оператор ==|==]]</tt>". | ||
Строка 30: | Строка 32: | ||
== name == | == name == | ||
− | '''Возвращает''': <tt>[[ | + | '''Возвращает''': <tt>[[string]]</tt> <br> |
Метод возвращает имя класса. Эквивалент <tt>[[Object#className|Object:className]]</tt>. | Метод возвращает имя класса. Эквивалент <tt>[[Object#className|Object:className]]</tt>. | ||
Строка 46: | Строка 48: | ||
for (var i = 0 ; i < parents.size; i++) | for (var i = 0 ; i < parents.size; i++) | ||
//обработка полученных данных | //обработка полученных данных | ||
+ | </source> | ||
+ | либо | ||
+ | <source lang="kpp"> | ||
+ | var my = new MyClass; | ||
+ | my.class.parents.each() { |parent| /* обработка полученных данных */; }; | ||
</source> | </source> | ||
== childOf == | == childOf == | ||
− | childOf(''имя класса:'' <tt>[[ | + | childOf(''имя класса:'' <tt>[[string]]</tt>) <br> |
− | '''Возвращает''': [[ | + | '''Возвращает''': [[логическое значение]] <br> |
Проверяет, унаследован ли текущий класс от указанного класса. | Проверяет, унаследован ли текущий класс от указанного класса. | ||
Строка 57: | Строка 64: | ||
== managed == | == managed == | ||
− | '''Возвращает''': [[ | + | '''Возвращает''': [[логическое значение]] <br> |
Проверяет, является ли текущий класс [[управляемые и неуправляемые классы|управляемым]] или нет. | Проверяет, является ли текущий класс [[управляемые и неуправляемые классы|управляемым]] или нет. | ||
Строка 63: | Строка 70: | ||
== inspect == | == inspect == | ||
− | '''Возвращает''': <tt>[[ | + | '''Возвращает''': <tt>[[string]]</tt> <br> |
Возвращает информацию о классе. См. также <tt>[[Object#inspect|Object:inspect]]</tt>. | Возвращает информацию о классе. См. также <tt>[[Object#inspect|Object:inspect]]</tt>. | ||
Строка 69: | Строка 76: | ||
== hasStaticMethod == | == hasStaticMethod == | ||
− | hasStaticMethod(''имя статического метода:'' <tt>[[ | + | hasStaticMethod(''имя статического метода:'' <tt>[[string]]</tt>) <br> |
− | '''Возвращает''': [[ | + | '''Возвращает''': [[логическое значение]] <br> |
Проверяет, имеет ли класс указанный статический метод. | Проверяет, имеет ли класс указанный статический метод. | ||
Строка 76: | Строка 83: | ||
== getStaticMethod == | == getStaticMethod == | ||
− | getStaticMethod(''имя статического метода:'' <tt>[[ | + | getStaticMethod(''имя статического метода:'' <tt>[[string]]</tt>) <br> |
− | '''Возвращает''': <tt>[[ | + | '''Возвращает''': <tt>[[Method]]</tt> <br> |
− | Данный метод возвращает статический метод класса в виде объекта. Впоследствии, этот объект может использоваться для удаленного вызова метода, либо для получения дополнительной информации. При попытке получения несуществующего метода будет возбуждено исключение <tt>[[ENotFound|ENotFound]]</tt>. | + | Данный метод возвращает статический метод класса в виде объекта. Впоследствии, этот объект может использоваться для удаленного вызова метода, либо для получения дополнительной информации. При попытке получения несуществующего метода будет возбуждено исключение <tt>[[Классы исключений#ENotFound|ENotFound]]</tt>. |
Пример использования: | Пример использования: | ||
<source lang="kpp"> | <source lang="kpp"> | ||
− | var | + | var rnd = System.getClass('std/int').getStaticMethod('random'); |
− | var | + | var x = rnd(); |
</source> | </source> | ||
− | В вышеприведенном примере, с помощью класса <tt>[[ | + | В вышеприведенном примере, с помощью класса <tt>[[System]]</tt>, мы получаем класс <tt>[[int]]</tt> и создаем объект, соответствующий статическому методу <tt>random</tt>. Объект метода сохраняется в переменной ''rnd''. Обращаясь к этой переменной как к функции, мы неявным образом вызываем сам метод. |
Текущая версия на 01:31, 26 ноября 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> либо <source lang="kpp"> var my = new MyClass; my.class.parents.each() { |parent| /* обработка полученных данных */; }; </source>
[править] childOf
childOf(имя класса: string)
Возвращает: логическое значение
Проверяет, унаследован ли текущий класс от указанного класса.
[править] managed
Возвращает: логическое значение
Проверяет, является ли текущий класс управляемым или нет.
[править] inspect
Возвращает: string
Возвращает информацию о классе. См. также Object:inspect.
[править] hasStaticMethod
hasStaticMethod(имя статического метода: string)
Возвращает: логическое значение
Проверяет, имеет ли класс указанный статический метод.
[править] getStaticMethod
getStaticMethod(имя статического метода: string)
Возвращает: Method
Данный метод возвращает статический метод класса в виде объекта. Впоследствии, этот объект может использоваться для удаленного вызова метода, либо для получения дополнительной информации. При попытке получения несуществующего метода будет возбуждено исключение ENotFound.
Пример использования: <source lang="kpp"> var rnd = System.getClass('std/int').getStaticMethod('random'); var x = rnd(); </source>
В вышеприведенном примере, с помощью класса System, мы получаем класс int и создаем объект, соответствующий статическому методу random. Объект метода сохраняется в переменной rnd. Обращаясь к этой переменной как к функции, мы неявным образом вызываем сам метод.