在 Delphi Rio 中,我创建了一个类,其目的是从数据库中读取记录。这条记录纯粹是只读的,看完之后,我需要衍生出一些额外的属性。我的问题与我想在我的类定义中使用的 Stringlist 有关。我有一个名为 fVENDORS_TO_COLORCODE 的私有类成员。这是一个逗号分隔的字符串。我想要创建一个 TStringlist 属性。我正在使用 TStringList.CommaToText 将我的值加载到 Tstringlist 中。我在创建构造函数中执行此操作。我遇到的问题是,虽然 StringList 在构造函数中有效,但它在构造函数之外为零,我不知道我做错了什么。这是代码的相关部分。
type
TProfileDef = class(TObject)
private
fNAME: String;
fVENDORS_TO_COLORCODE: String; // incoming comma separated string. Example string: Microsoft,IBM
fVENDORS_TO_COLORCODE_SL : TStringList;
..
public
constructor Create(ProfileName: String);
destructor Destroy; override;
published
property NAME: String read fNAME;
property VENDORS_TO_COLORCODE: String read fVENDORS_TO_COLORCODE;
property VENDORS_TO_COLORCODE_SL : TStringList read fVENDORS_TO_COLORCODE_SL;
..
end;
implementation
destructor TProfileDef.Destroy;
begin
inherited;
fVENDORS_TO_COLORCODE_SL.Free;
end;
constructor TProfileDef.Create(ProfileName: String);
var
fVENDORS_SL: TStringList;
fVENDORS_TO_COLORCODE_SL: TStringList;
TempVendorList : String;
begin
inherited Create;
fName := ProfileName;
.. [Find my record based on ProfileName, and load the DB columns into the private variables]..
// Load the Color Code String into a StringList;
fVENDORS_TO_COLORCODE_SL := TStringList.Create;
fVENDORS_TO_COLORCODE_SL.CommaToText := fVENDORS_TO_COLORCODE;
end;
Run Code Online (Sandbox Code Playgroud)
在构造函数中,创建了 fVENDORS_TO_COLORCODE_SL 字符串列表,并添加了数据......问题是当我尝试使用它时......
var
TestClass: TProfileDef;
begin
TestClass := TProfileDef.Create('Sample Profile');
// TestClass.Name is valid
// TestClass.VENDORS_TO_COLORCODE_SL is nil, and trying to access gives AV
Run Code Online (Sandbox Code Playgroud)
不知何故,我定义了这个错误,但我无法确定它是什么,以便纠正它。
你的班级有一个私人领域
fVENDORS_TO_COLORCODE_SL: TStringList;
Run Code Online (Sandbox Code Playgroud)
你的构造函数应该创建一个TStringList对象并让这个变量指向它。我认为这是你的意图,至少。但是,您的构造函数有一个同名的局部变量, fVENDORS_TO_COLORCODE_SL,因此该行
fVENDORS_TO_COLORCODE_SL := TStringList.Create;
Run Code Online (Sandbox Code Playgroud)
确实创建了一个TStringList对象,但是指针被保存到这个局部变量,类的同名字段仍然存在nil。
解决方法:去掉构造函数中局部变量的声明。
| 归档时间: |
|
| 查看次数: |
135 次 |
| 最近记录: |