ClassItem(ClassIndex: Integer): IForeClass;
ClassIndex. Индекс конструкции, реализованной в сборке. Значение индекса указывается в диапазоне [0, ClassesCount-1].
Метод ClassItem возвращает информацию о конструкции сборки с указанным индексом.
Для выполнения примера предполагается наличие в репозитории сборки с идентификатором «ASSM_TEST». В сборке реализованы какие-либо классы, интерфейсы или перечисления.
Добавьте ссылку на системную сборку Fore, Metabase, Xml.
Sub UserProc;
Var
ForeService: IForeServices;
Runtime: IForeRuntime;
Assm: IForeAssembly;
FClass: IForeClass;
i, j: Integer;
Begin
ForeService := MetabaseClass.Active As IForeServices;
Runtime := ForeService.GetRuntime;
//Загрузка сборки
Assm := Runtime.BindToAssembly("ASSM_TEST");
//Получение информации о интерфейсах, классах, перечислениях
j := Assm.ClassesCount - 1;
For i := 0 To j Do
FClass := Assm.ClassItem(i);
Select Case FClass.ClassType
Case ForeClassType.Class_: Debug.Write("Класс: ");
Case ForeClassType.Interface_: Debug.Write("Интерфейс: ");
Case ForeClassType.Enum_: Debug.Write("Перечисление: ");
End Select;
Debug.Write(FClass.Name);
Debug.Write("; Модификатор доступа: ");
Select Case FClass.ClassAccessSpecificatorKind
Case AccessSpecificatorKind.Public_: Debug.WriteLine("Public");
Case AccessSpecificatorKind.Private_: Debug.WriteLine("Private");
Case AccessSpecificatorKind.Protected_: Debug.WriteLine("Protected");
Case AccessSpecificatorKind.Friend_: Debug.WriteLine("Friend");
Case AccessSpecificatorKind.ProtectedFriend: Debug.WriteLine("ProtectedFriend");
End Select;
If FClass.XMLDocumentation <> Null Then
Debug.WriteLine("Комментарии:");
Debug.Indent;
PrintXml(FClass.XMLDocumentation);
Debug.Unindent;
End If;
If FClass.ParentName <> "" Then
Debug.WriteLine("Родительский класс/интерфейс: " + FClass.ParentName);
End If;
End For;
End Sub UserProc;
Sub PrintXml(_doc: IXmlDomDocument);
Var
_nodes: IXmlDomNodeList;
_node: IXmlDomNode;
_elem: IXmlDomElement;
Begin
_elem := _doc.documentElement;
Debug.WriteLine("Root node: " + _elem.nodeName);
_nodes := _elem.childNodes;
Debug.WriteLine("Root child count: " + _nodes.length.ToString);
Debug.WriteLine("Nodes: ");
Debug.Indent;
_node := _nodes.nextNode;
While _node <> Null Do
Debug.WriteLine("Name: " + _node.nodeName + ", Text: " + _node.text);
_node := _nodes.nextNode;
End While;
Debug.Unindent;
End Sub PrintXml;
При выполнении примера в среду выполнения будет загружена сборка репозитория с указанным идентификатором. В консоль среды разработки будет выведена информация о конструкциях, которые реализованы в этой сборке.
См. также: