FieldItem(Index: Integer): IForeVar;
FieldItem(Index: Integer): Prognoz.Platform.Interop.Fore.IForeVar;
Index. Индекс поля.
Метод FieldItem возвращает поле класса с указанным индексом.
Количество доступных полей можно получить с помощью метода FieldsCount.
Для выполнения примера предполагается наличие модуля с идентификатором «MODULE». В модуле добавлен следующий класс:
Class Test: Object
Public A: Integer;
Public B: String;
Public C: DateTime;
Public Constructor Create;
Begin
a := 100;
b := "Test";
c := DateTime.Now;
End Constructor Create;
End Class Test;
Добавьте ссылки на системные сборки: Fore, Metabase.
Sub UserProc;
Var
ForeService: IForeServices;
Runtime: IForeRuntime;
Assm: IForeAssembly;
FClass: IForeClass;
ClassInst: IForeObject;
FSub: IForeSub;
Field: IForeVar;
c, i: Integer;
Begin
ForeService := MetabaseClass.Active As IForeServices;
Runtime := ForeService.GetRuntime;
//Загрузка сборки
Assm := Runtime.BindToAssembly("MODULE");
//Получение класса
FClass := Assm.BindToClass("Test");
//Создание экземпляра класса
ClassInst := FClass.CreateObject;
//Вызов конструктора, инициализирующего значения для полей
FSub := FClass.BindToMethod("Create");
FSub.Self := ClassInst;
FSub.Invoke;
//Просмотр полей
c := ClassInst.FieldsCount;
For i := 0 To c - 1 Do
Field := ClassInst.FieldItem(i);
Debug.WriteLine(Field.Name + " : " + Field.Value);
End For;
End Sub UserProc;
Imports Prognoz.Platform.Interop.Fore;
Imports Prognoz.Platform.Interop.Metabase;
Public Shared Sub Main(Params: StartParams);
Var
ForeService: IForeServices;
Runtime: IForeRuntime;
Assm: IForeAssembly;
FClass: IForeClass;
ClassInst: IForeObject;
FSub: IForeSub;
Field: IForeVar;
c, i: Integer;
Begin
ForeService := Params.Metabase As IForeServices;
Runtime := ForeService.GetRuntime();
//Загрузка сборки
Assm := Runtime.BindToAssembly("MODULE");
//Получение класса
FClass := Assm.BindToClass("Test");
//Создание экземпляра класса
ClassInst := FClass.CreateObject();
//Вызов конструктора, инициализирующего значения для полей
FSub := FClass.BindToMethod("Create");
FSub.Self := ClassInst;
FSub.Invoke();
//Просмотр полей
c := ClassInst.FieldsCount();
For i := 0 To c - 1 Do
Field := ClassInst.FieldItem(i);
System.Diagnostics.Debug.WriteLine(Field.Name + " : " + Field.Value);
End For;
End Sub;
При выполнении примера в среду выполнения будет загружен указанный модуль. Будет создан экземпляр класса, выполнен конструктор, который инициализирует значения полей. После этого значения всех полей будут выведены в консоль среды разработки.
См. также: