powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как определить является ли класс потомком данного?
8 сообщений из 8, страница 1 из 1
Как определить является ли класс потомком данного?
    #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
Как определить является ли класс потомком данного?
    #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
Как определить является ли класс потомком данного?
    #38855515
eduard93
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
konstantin_11, если ваши классы наследуются от %Library.SystemBase (а большая часть классов от него наследуется), то посмотрите на представленные там метоы: %IsA и %Extends.
...
Рейтинг: 0 / 0
Как определить является ли класс потомком данного?
    #38855517
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eduard93(а большая часть классов от него наследуется)
Даже классы которые явно от него не наследуются (даже вообще без супер класса), все равно наследуются, так что, все классы имеют эти методы
...
Рейтинг: 0 / 0
Как определить является ли класс потомком данного?
    #38855538
konstantin_11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DAiMorДаже классы которые явно от него не наследуются (даже вообще без супер класса), все равно наследуются, так что, все классы имеют эти методы
Действительно так. Магия какая-то.... Объясните, как это работает?

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

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


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