Когда мастер импорта WSDL генерирует интерфейсы, все свойства имеют параметр Index, но, читая код и модуль InvokeRegistry, я не могу найти, для чего это нужно, кто-нибудь знает, действительно ли это необходимо?
Как это
Login = class(TRemotable)
private
[...]
published
property User: string Index (IS_OPTN) read GetUser write SetUser stored User_Specified;
[...]
end;
Я спрашиваю, потому что хочу изменить этот модуль, добавив некоторые интерфейсы к этим классам, для интеграции с платформой MVP.





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');
Я нашел более подробное объяснение этого вопроса, При использовании индексов несколько свойств могут использовать одни и те же методы доступа.
Хороший пример из справки 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).
Wouter, это так, но параметр не используется ни в одном методе, поэтому у меня вопрос.