Class — различия между версиями

Материал из Deeptown Manual
Перейти к: навигация, поиск
м Gide:Class» переименована в «Class»: Отмена пространств имен)
м (getStaticMethod)
 
(не показаны 8 промежуточных версий 2 участников)
Строка 1: Строка 1:
Основной задачей класса <tt>Class</tt> является предоставление механизма рефлексии. Сущность его заключается в том, что программист может получить инетресующую его информацию о классах и объектах прямо по ходу выполнения программы. В то время как класс <tt>[[Object|Object]]</tt> ставит своей задачей управление собственно объектами, то есть инстанциями классов, класс <tt>Class</tt> используется для управления самими классами от которых были порождены соответствующие объекты. Ирония заключается в том что инстанции класса <tt>Class</tt>, будучи потомками класса <tt>[[Object|Object]]</tt>, сами представляют классы.  
+
Основной задачей класса <tt>Class</tt> является предоставление механизма рефлексии. Сущность его заключается в том, что программист может получить инетресующую его информацию о классах и объектах прямо по ходу выполнения программы. В то время как класс <tt>[[Object]]</tt> ставит своей задачей управление собственно объектами, то есть инстанциями классов, класс <tt>Class</tt> используется для управления самими классами от которых были порождены соответствующие объекты. Ирония заключается в том что инстанции класса <tt>Class</tt>, будучи потомками класса <tt>[[Object]]</tt>, сами представляют классы.  
  
'''Родители''': <tt>[[Object|Object]]</tt> <br>
+
'''Родители''': <tt>[[Object]]</tt> <br>
'''Методы''': <tt>[[#оператор ==|==]] [[#оператор <>|<>]] [[#name|name]] [[#parents|parents]] [[#childOf|childOf]] [[#managed|managed]] [[#inspect|inspect]] [[#hasStaticMethod|hasStaticMethod]] [[#getStaticMethod|getStaticMethod]]</tt><br>
+
'''Методы''': <tt>[[#name|name]] [[#parents|parents]] [[#childOf|childOf]] [[#managed|managed]] [[#inspect|inspect]] [[#hasStaticMethod|hasStaticMethod]] [[#getStaticMethod|getStaticMethod]]</tt><br>
'''Статические методы''': нет <br>
+
'''Реализует операторы''':  
 +
<tt>[[#оператор ==|==]]</tt>,
 +
<tt>[[#оператор <>|<>]]</tt>
  
 
__NOTOC__
 
__NOTOC__
Строка 9: Строка 11:
 
== оператор == ==
 
== оператор == ==
  
operator == (''объект сравнения:'' динамическая переменная) <br>
+
operator == (''объект сравнения'') <br>
'''Возвращает''': [[логическое значение|логическое значение]] <br>
+
'''Возвращает''': [[логическое значение]] <br>
  
Метод используется для сравнения классов. Возвращает истину в том случае когда текущий объект и передный параметр — это один и тот же класс. Пример:
+
Метод используется для сравнения классов. Возвращает истину в том случае когда текущий объект и переданный параметр — это один и тот же класс. Пример:
  
 
<source lang="kpp">
 
<source lang="kpp">
Строка 21: Строка 23:
 
== оператор <> ==
 
== оператор <> ==
  
operator == (''объект сравнения:'' динамическая переменная) <br>
+
operator <> (''объект сравнения'') <br>
'''Возвращает''': [[логическое значение|логическое значение]] <br>
+
'''Возвращает''': [[логическое значение]] <br>
  
 
Инверсия оператора "<tt>[[#оператор ==|==]]</tt>".  
 
Инверсия оператора "<tt>[[#оператор ==|==]]</tt>".  
Строка 30: Строка 32:
 
== name ==
 
== name ==
  
'''Возвращает''': <tt>[[string|string]]</tt> <br>
+
'''Возвращает''': <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>[[string|string]]</tt>) <br>
+
childOf(''имя класса:'' <tt>[[string]]</tt>) <br>
'''Возвращает''': [[логическое значение|логическое значение]] <br>
+
'''Возвращает''': [[логическое значение]] <br>
  
 
Проверяет, унаследован ли текущий класс от указанного класса.
 
Проверяет, унаследован ли текущий класс от указанного класса.
Строка 57: Строка 64:
 
== managed ==
 
== managed ==
  
'''Возвращает''': [[логическое значение|логическое значение]] <br>
+
'''Возвращает''': [[логическое значение]] <br>
  
 
Проверяет, является ли текущий класс [[управляемые и неуправляемые классы|управляемым]] или нет.
 
Проверяет, является ли текущий класс [[управляемые и неуправляемые классы|управляемым]] или нет.
Строка 63: Строка 70:
 
== inspect ==
 
== inspect ==
  
'''Возвращает''': <tt>[[string|string]]</tt> <br>
+
'''Возвращает''': <tt>[[string]]</tt> <br>
  
 
Возвращает информацию о классе. См. также <tt>[[Object#inspect|Object:inspect]]</tt>.
 
Возвращает информацию о классе. См. также <tt>[[Object#inspect|Object:inspect]]</tt>.
Строка 69: Строка 76:
 
== hasStaticMethod ==
 
== hasStaticMethod ==
  
hasStaticMethod(''имя статического метода:'' <tt>[[string|string]]</tt>) <br>
+
hasStaticMethod(''имя статического метода:'' <tt>[[string]]</tt>) <br>
'''Возвращает''': [[логическое значение|логическое значение]] <br>
+
'''Возвращает''': [[логическое значение]] <br>
  
 
Проверяет, имеет ли класс указанный статический метод.
 
Проверяет, имеет ли класс указанный статический метод.
Строка 76: Строка 83:
 
== getStaticMethod ==
 
== getStaticMethod ==
  
getStaticMethod(''имя статического метода:'' <tt>[[string|string]]</tt>) <br>
+
getStaticMethod(''имя статического метода:'' <tt>[[string]]</tt>) <br>
'''Возвращает''': <tt>[[Method|Method]]</tt> <br>
+
'''Возвращает''': <tt>[[Method]]</tt> <br>
  
Данный метод возвращает статический метод класса в виде объекта. Впоследствии, этот объект может использоваться для удаленного вызова метода, либо для получения дополнительной информации. При попытке получения несуществующего метода будет возбуждено исключение <tt>[[ENotFound|ENotFound]]</tt>.
+
Данный метод возвращает статический метод класса в виде объекта. Впоследствии, этот объект может использоваться для удаленного вызова метода, либо для получения дополнительной информации. При попытке получения несуществующего метода будет возбуждено исключение <tt>[[Классы исключений#ENotFound|ENotFound]]</tt>.
  
 
Пример использования:
 
Пример использования:
 
<source lang="kpp">
 
<source lang="kpp">
var c = System.getClass(:int).getStaticMethod(:random);
+
var rnd = System.getClass('std/int').getStaticMethod('random');
var rnd = c();
+
var x = rnd();
 
</source>
 
</source>
  
В вышеприведенном примере, с помощью класса <tt>[[System|System]]</tt>, мы получаем класс <tt>[[int|int]]</tt> и создаем объект, соответствующий статическому методу <tt>random</tt>. Объект метода сохраняется в переменной ''c''. Обращаясь к этой переменной как к функции, мы неявным образом вызываем сам метод.
+
В вышеприведенном примере, с помощью класса <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

Возвращает: array<string>

Метод возвращает массив имен классов-родителей.

Примечание: Результирующий массив создается по требованию при каждом вызове метода. Поэтому, при необходимости итерирования следует сначала сохранить полученный массив в переменную, а затем работать уже с ней: <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. Обращаясь к этой переменной как к функции, мы неявным образом вызываем сам метод.

Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
информация
документация
Инструменты