|
Как определить является ли класс потомком данного?
|
|||
---|---|---|---|
#18+
Как можно определить, является ли некоторый класс потомком данного, не перебирая при этом всех потомков данного класса? Этот вот код решает задачу перебором всех потомков, коих может быть очень и очень много (как, например, у %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 } ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2015, 18:01 |
|
Как определить является ли класс потомком данного?
|
|||
---|---|---|---|
#18+
как сложно например так, скажет является ли %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. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2015, 18:22 |
|
Как определить является ли класс потомком данного?
|
|||
---|---|---|---|
#18+
konstantin_11, если ваши классы наследуются от %Library.SystemBase (а большая часть классов от него наследуется), то посмотрите на представленные там метоы: %IsA и %Extends. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2015, 18:26 |
|
Как определить является ли класс потомком данного?
|
|||
---|---|---|---|
#18+
eduard93(а большая часть классов от него наследуется) Даже классы которые явно от него не наследуются (даже вообще без супер класса), все равно наследуются, так что, все классы имеют эти методы ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2015, 18:28 |
|
Как определить является ли класс потомком данного?
|
|||
---|---|---|---|
#18+
DAiMorДаже классы которые явно от него не наследуются (даже вообще без супер класса), все равно наследуются, так что, все классы имеют эти методы Действительно так. Магия какая-то.... Объясните, как это работает? P.S. Метод %IsA решил задачу ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2015, 19:08 |
|
Как определить является ли класс потомком данного?
|
|||
---|---|---|---|
#18+
konstantin_11DAiMorДаже классы которые явно от него не наследуются (даже вообще без супер класса), все равно наследуются, так что, все классы имеют эти методы Действительно так. Магия какая-то.... Объясните, как это работает? P.S. Метод %IsA решил задачуПотому что это базовый суперкласс по умолчанию. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2015, 23:23 |
|
Как определить является ли класс потомком данного?
|
|||
---|---|---|---|
#18+
DAiMor, по умолчанию? это где-то настраивается? и почему тогда в классах без предков ни в документации, ни в студии не отображаются методы базового суперкласса? хотя эти методы действительно работают? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2015, 05:12 |
|
Как определить является ли класс потомком данного?
|
|||
---|---|---|---|
#18+
konstantin_11DAiMor, по умолчанию? это где-то настраивается? и почему тогда в классах без предков ни в документации, ни в студии не отображаются методы базового суперкласса? хотя эти методы действительно работают?Это нигде не настраивается. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2015, 09:15 |
|
|
start [/forum/topic.php?fid=39&gotonew=1&tid=1556737]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
54ms |
get topic data: |
12ms |
get first new msg: |
8ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
others: | 275ms |
total: | 440ms |
0 / 0 |