Ple*_*rds 2 delphi oop file-io
我正在实现一个对象TTextFile,它是一个使用低级pascal文件函数和OO范例的框架.我想向开发人员添加在同一对象中需要时将其用作TStringList的选项,如下所示:
TTextFile = class(TObject)
constructor Create(FileName: String);
procedure OpenForRead;
procedure OpenForWrite;
{...}
property Content: TStringList;
end;
Run Code Online (Sandbox Code Playgroud)
但我的问题是我希望该Content属性LoadFromFile仅在应用程序第一次使用它时才使用用户.不在Create构造中,因为文件可能太大,程序员更喜欢在这种情况下使用其他函数.在Content将使用的时候,他知道他是用不会非常大的文件.
大文件的示例是包含所有客户端名称和公民ID的列表.一个非常小的文件的例子是相同的列表,但仅限于当天等待参加的客户端.
是否可以在OO pascal中完成?如果不可能,我将不得不进行一种激活程序或过载Create,并使程序员Content在使用之前始终检查是否已加载.
使用延迟初始化的概念.第一次Content读取属性时,加载文件内容,但随后保持内容可用,以便后续访问属性不会重新读取文件.
private
FContent: TStrings;
function GetContent: TStrings;
public
property Content: TStrings read GetContent;
function TTextFile.GetContent: TStrings;
begin
if not Assigned(FContent) then begin
FContent := TStringList.Create;
try
FContent.LoadFromFile(FFileName);
except
FContent.Free;
FContent := nil;
raise;
end;
end;
Result := FContent;
end;
Run Code Online (Sandbox Code Playgroud)