Гость
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как определить является ли класс потомком данного? / 8 сообщений из 8, страница 1 из 1
15.01.2015, 18:01
    #38855502
konstantin_11
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить является ли класс потомком данного?
Как можно определить, является ли некоторый класс потомком данного, не перебирая при этом всех потомков данного класса?

Этот вот код решает задачу перебором всех потомков, коих может быть очень и очень много (как, например, у %Library.RegisteredObject). Есть ли варианты сделать это быстрее?ClassMethod IsSubClassOf(SuperClassName As %String, SubClassName As %String) As %Boolean
{
    set rs=##class(%ResultSet).%New("%Dictionary.ClassDefinition:SubclassOf")
    do rs.Execute(SuperClassName)
    while (rs.Next()) {
        if ($isobject(##class(%Dictionary.CompiledClass).%OpenId(rs.Get("Name")))) {
            if (rs.Get("Name") = SubClassName) return $$$TRUE
        }
    }
    return $$$FALSE
}
...
Рейтинг: 0 / 0
15.01.2015, 18:22
    #38855512
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить является ли класс потомком данного?
как сложно
например так, скажет является ли %Persistent потомком класса %RegisteredObject
w $ClassMethod("%Persistent","%IsA","%RegisteredObject")

classmethod %IsA (isclass As %String) as %Integer
Returns true (1) if instances of this class are also instances of the isclass parameter. That is 'isclass' is a primary superclass of this object.
...
Рейтинг: 0 / 0
15.01.2015, 18:26
    #38855515
eduard93
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить является ли класс потомком данного?
konstantin_11, если ваши классы наследуются от %Library.SystemBase (а большая часть классов от него наследуется), то посмотрите на представленные там метоы: %IsA и %Extends.
...
Рейтинг: 0 / 0
15.01.2015, 18:28
    #38855517
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить является ли класс потомком данного?
eduard93(а большая часть классов от него наследуется)
Даже классы которые явно от него не наследуются (даже вообще без супер класса), все равно наследуются, так что, все классы имеют эти методы
...
Рейтинг: 0 / 0
15.01.2015, 19:08
    #38855538
konstantin_11
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить является ли класс потомком данного?
DAiMorДаже классы которые явно от него не наследуются (даже вообще без супер класса), все равно наследуются, так что, все классы имеют эти методы
Действительно так. Магия какая-то.... Объясните, как это работает?

P.S. Метод %IsA решил задачу
...
Рейтинг: 0 / 0
15.01.2015, 23:23
    #38855638
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить является ли класс потомком данного?
konstantin_11DAiMorДаже классы которые явно от него не наследуются (даже вообще без супер класса), все равно наследуются, так что, все классы имеют эти методы
Действительно так. Магия какая-то.... Объясните, как это работает?

P.S. Метод %IsA решил задачуПотому что это базовый суперкласс по умолчанию.
...
Рейтинг: 0 / 0
16.01.2015, 05:12
    #38855708
konstantin_11
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить является ли класс потомком данного?
DAiMor, по умолчанию? это где-то настраивается? и почему тогда в классах без предков ни в документации, ни в студии не отображаются методы базового суперкласса? хотя эти методы действительно работают?
...
Рейтинг: 0 / 0
16.01.2015, 09:15
    #38855792
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить является ли класс потомком данного?
konstantin_11DAiMor, по умолчанию? это где-то настраивается? и почему тогда в классах без предков ни в документации, ни в студии не отображаются методы базового суперкласса? хотя эти методы действительно работают?Это нигде не настраивается.
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как определить является ли класс потомком данного? / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]