让我们说我有一个名为TProgramSettings的类,它看起来像这样:
TProgramSettings = class
flags: UInt32;
...
end;
PProgramSettings = ^TProgramSettings;
所以我这样初始化程序:
var
MyProgramSettings: TProgramSettings;
begin
MyProgramSettings := TProgramSettings.Create;
MyProgramSettings.Flags := 0;
ApplySettings(@MyProgramSettings);
ApplySettings过程如下:
procedure ApplySettings(ProgramSettings: PProgramSettings);
var
MyObject : TCustomObject;
begin
MyObject := TCustomObject.Create;
MyObject.Settings.Flags := ProgramSettings^.Flags;
...
end;
现在我的代码看起来像这样,但是我想知道是否还有更好的方法?我是否违反了对象Pascal / Delphi代码约定?仅将TProgramSettings记录下来会更好吗?我真的不明白Records和Classs之间的区别,我只知道必须初始化类。在我将TProgramSettings记录为已读内容的情况下,我不应该将指针传递给它,因为该记录指向内存中的相同地址,不需要像类一样被引用。我应该怎么做?任何帮助将不胜感激:)
答案 0 :(得分:2)
类型为class的对象已经是一个指针,因此确实不需要像您那样取消引用它。等效为
TProgramSettings = class
flags: UInt32;
...
end;
...
var
MyProgramSettings: TProgramSettings;
begin
MyProgramSettings := TProgramSettings.Create;
MyProgramSettings.Flags := 0;
ApplySettings(MyProgramSettings);
...
procedure ApplySettings(ProgramSettings: TProgramSettings);
var
MyObject : TCustomObject;
begin
MyObject := TCustomObject.Create;
MyObject.Settings.Flags := ProgramSettings.Flags;
...
end;
关于记录和类对象之间的区别,一种思考方式是,当您将记录定义为var时,该定义将创建记录(无需调用“ Create”),而对于一个类,您只是在创建指向对象的指针,而您仍然需要创建对象本身。除此之外,还有很多事情要做,但是现在开始考虑吧。