我有一个内部将另一个类定义为数组的类,如下所示:
[value]="statename.valuename"
我的问题是我找不到将元素添加到属性TaggedValues的方法。 所以我在这里问哪种是初始化,重新设置元素和创建元素的正确方法?
谢谢您的答复。 Guillot
可能我忽略了太多有关我的问题的信息,所以我将尝试更好地说明自己。
涉及的类来自WSDL,它们以这种方式彼此继承:
class1 = class
private
fTag : string
.
.
published
property Tag : read fTag write fTag;
end;
arrayOfClass1 = array of class1;
class2 =class
private
FTvalue1 : string;
FTaggedValues: arrayOfClass1;
procedure SetTaggedValues (.....);
do something;
published
property value1 : read FTvalue1 write FTValue1;
property TaggedValues : arrayOfClass1 Index read FTaggedValues write SetTaggedValues;
end;
这是感兴趣的类的摘录代码:
StdOrderDto2 = class(TRemotable)
PrtOrderDto2 = class(StdOrderDto2)
PrtOrderColorDecksDto2 = class(PrtOrderDto2)
其中:
StdOrderDto2 = class(TRemotable)
private
.
.
FTaggedValues: ArrayOfStdTagValueDto;
procedure SetTaggedValues(Index: Integer; const AArrayOfStdTagValueDto: ArrayOfStdTagValueDto);
.
.
public
destructor Destroy; override;
published
.
property TaggedValues: ArrayOfStdTagValueDto Index (IS_OPTN or IS_NLBL) read FTaggedValues write SetTaggedValues stored TaggedValues_Specified;
.
end;
和:
ArrayOfStdTagValueDto = array of StdTagValueDto2;
所以我的第一个问题是: 如果该类不是TRemotable类的直接后代,是否也可以使用该类(PrtOrderColorDecksDto2)进行服务器调用? 我想是的,因为祖先(StdOrderDto2)是可伸缩的...但是我对此不太确定。
第二个问题: 对于“填充” TaggedValues,我使用以下代码段:
StdTagValueDto2 = class(TRemotable)
private
.
.
(simple datatype are involved)
published
.
(etc)
.
end;
所以我的问题是:为什么会出现E2197编译器错误? 并且一旦有人可以向我解释我做错了什么,可以为我提供解决方法吗?
答案 0 :(得分:1)
如ViRuSTriNiTy所说,用TList
但是,如果您仍然喜欢使用数组,则只需在Class2中添加AddTag方法以添加新的TagValue,并在释放对象时添加Destroy方法以释放其所有标签。无需初始化。
class2 = class
private
...
FTaggedValues = array of class1;
published
..
procedure AddTagValue(TagValue: class1);
destructor Destroy; override;
end;
implementation
procedure class2.AddTagValue(TagValue: class1);
begin
SetLength(FTaggedValues, Length(FTaggedValues) + 1);
FTaggedValues[Length(FTaggedValues) - 1] := TagValue;
end;
destructor class2.Destroy;
var TagValue: class1;
begin
for TagValue in FTaggedValues do TagValue.Free;
inherited Destroy;
end;