Проверка типа объекта во время выполнения программы
В процессе выполнения программы можно осуществить проверку объекта на принадлежность его к какому-либо индивидуальному типу путем использования атрибута 'Tag
Чтобы продемонстрировать это, предположим, что реализация процедуры Show
описывается следующим образом:
procedure Show (Self: in Root'Class) is
begin if Self'Tag = Root'Tag then Ada.Text_IO.Put_Line ("Root"); elsif Self'Tag = Child_1'Tag then Ada.Text_IO.Put_Line ("Child_1"); elsif Self'Tag = Clild_2'Tag then Ada.Text_IO.Put_Line ("Clild_2"); elsif Self'Tag = Grand_Child_2_1'Tag then Ada.Text_IO.Put_Line ("Grand_Child_2_1"); else Ada.Text_IO.Put_Line ("Unknown type"); end if; end Show; |
Кроме того, в процессе выполнения программы, возможно осуществление проверки принадлежности (или не принадлежности) типа объекта к какому-либо классу.
Для выполнения таких проверок используются операции проверки диапазона "in" и "not in":
. . . if Some_Instance in Child_1'Class then
. . . end if; . . . |
В данном примере выполняется проверка принадлежности переменной Some_Instance
к иерархии типов, корнем которой будет тип Child_1, причем, предполагается, что переменная Some_Instance
является переменной надклассового или тэгового типа.
Следует также обратить внимание на то, что для выполнения этой проверки используется "Some_Instance in Child_1'Class", а не "Some_Instance in Child_1".