Что для опции Index в производных классах TRemotable?

Когда мастер импорта WSDL генерирует интерфейсы, все свойства имеют параметр Index, но, читая код и модуль InvokeRegistry, я не могу найти, для чего это нужно, кто-нибудь знает, действительно ли это необходимо?

Как это

  Login = class(TRemotable)
  private
    [...] 
  published
    property User: string Index (IS_OPTN) read GetUser write SetUser stored User_Specified;
    [...]
  end;

Я спрашиваю, потому что хочу изменить этот модуль, добавив некоторые интерфейсы к этим классам, для интеграции с платформой MVP.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
0
1 942
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

IS_OPTN передается в GetUser и SetUser через параметр «Индекс» при доступе к свойству пользователя.

Геттеры / сеттеры, вероятно, выглядят так:

function GetUser(Index:Integer):String;
procedure SetUser(Index:Integer;const value:string);

Итак, подумайте об этом так:

MyString := MyLogin.user;
// is translated to:
MyString := getUser(IS_OPTN);

а также

MyLogin.user := 'me'; 
// is translated to:
SetUser(IS_OPTN,'me');

Wouter, это так, но параметр не используется ни в одном методе, поэтому у меня вопрос.

Cesar Romero 03.01.2009 16:04
Ответ принят как подходящий

Я нашел более подробное объяснение этого вопроса, При использовании индексов несколько свойств могут использовать одни и те же методы доступа.

Хороший пример из справки Delphi 2009:

type 
   TRectangle = class 
     private 
       FCoordinates: array[0..3] of Longint; 
       function GetCoordinate(Index: Integer): Longint; 
       procedure SetCoordinate(Index: Integer; Value: Longint); 
     public 
       property Left: Longint index 0 read GetCoordinate write SetCoordinate; 
       property Top: Longint index 1 read GetCoordinate write SetCoordinate; 
       property Right: Longint index 2 read GetCoordinate write SetCoordinate; 
       property Bottom: Longint index 3 read GetCoordinate write SetCoordinate; 
       property Coordinates[Index: Integer]: Longint read GetCoordinate write SetCoordinate; 
       ... 
   end;

Обратите внимание, что все свойства имеют один и тот же доступ к методу.

Да, это необходимо. С этой информацией, например, IS_OPTN, класс из TRemotable знает, что, когда свойство является необязательным для построения XML, поэтому, если это необязательно, узел добавляется только в том случае, если значение сохранено. По вашему делу:

property User: string Index (IS_OPTN) read GetUser write SetUser stored User_Specified

Элемент Пользователь будет добавлен в XML, если User_Specified истинно. User_Specified автоматически становится истинным, когда вы устанавливаете значение User, потому что это делает установщик SetUser.

Итак, когда пример компонента SOAP por будет строить XML, элемент будет добавлен только в том случае, если он сохранен, потому что он является необязательным (IS_OPTN).

Другие вопросы по теме