English 中文(简体)
TRemotable派生类中指数选项是什么?
原标题:
  • 时间:2009-01-02 17:23:48
  •  标签:

当WSDL导入向导生成接口时,所有属性都有索引选项,但阅读代码和InvokeRegistry单位,我找不到它的用途,有人知道这是否真的必要吗?

就像这样

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

我问这个是因为我想改变这个单元,为了结合MVP框架,增加一些接口到这些类中。

最佳回答

I found a more detailed explanation for this question, When using Indexes, several properties can share the same access methods.

一个好的例子,来自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传递给GetUser和SetUser。

获取器/设置器可能长这样:

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

因此,将其视为这样:

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

and: 和

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

是的,这是必要的。例如,TRemotable类可以通过此信息(如IS_OPTN)知道当属性是可选的时,如何构建XML,因此如果属性是可选的,则仅在存储了值时才添加节点。在您的情况下:

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

如果 User_Specified 为 true,则在 XML 中将添加元素 User。当您设置值为User时,User_Specified 会自动变为 true,因为setter SetUser会这样做。

所以,例如组件SOAP构建XML时,仅当可选项(IS_OPTN)已存储时,该元素将被添加。





相关问题
热门标签