T18*_*lot 2 arrays delphi class instantiation
我有一个项目需要使用预定义的类与远程Web服务进行通信.主类包含标准字段以及在不同类中定义的对象数组.实例化主类不会实例化较低级别的类,从而产生AV.下面的代码是问题的可执行示例,其中尝试在"ProductLines"数组中插入数据会产生错误.
问题是如何实例化数组对象?尝试构造函数,setlength()没有成功.任何指导多数赞赏.
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Soap.InvokeRegistry;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
ProductLine = class(TRemotable)
private
Description: string;
Quantity: integer;
end;
ArrayOfProductLines = array of ProductLine;
Customer = class(TRemotable)
private
Name: string;
Comment: string;
ProductLines: ArrayOfProductLines;
end;
// Customer Class
// Name
// Comment
// ProductLines (array)
// ProductLine
// ProductLine
// .....
var
Form1: TForm1;
TObj : Customer; // Transfer object
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
TObj.Name := 'Test Name;';
TObj.Comment := 'Test Comment';
TObj.ProductLines[0].Description := 'Test Description 1'; // fails
here, how to instantiate?
TObj.ProductLines[0].Quantity := 1;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Close;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
TObj := Customer.Create;
SetLength(Tobj.ProductLines,1);
end;
end.
Run Code Online (Sandbox Code Playgroud)
问题是如何实例化数组对象?
SetLength(TObj.ProductLines,1);
Run Code Online (Sandbox Code Playgroud)
该行创建数组中的第一个元素并将其初始化为nil.
要创建对象,只需执行以下操作:
TObj.ProductLines[0] := ProductLine.Create;
Run Code Online (Sandbox Code Playgroud)
请注意,ProductLines必须手动销毁数组中的每个实例化元素以避免内存泄漏.
关于命名约定的说明:
T作为首字母.例TCustomerT作为首字母.| 归档时间: |
|
| 查看次数: |
84 次 |
| 最近记录: |