我已下载Open Source SynTaskDialog unit for XP,Vista,Seven 并注意到我以前不知道的事情。
声明TTaskDialog
(对于Delphi7。对于较新版本,它被定义为s record
):
TTaskDialog = object
Title: string;
Inst: string;
...
function Execute...
end;
并且惊讶地看到用法是:
var Task: TTaskDialog;
Task.Inst := 'Saving application settings';
Task.Execute(...);
没有Task := TTaskDialog.Create
。
我做了一个小测试:
type
TTest = object
Caption: string;
procedure Execute;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
t: TTest;
begin
// t := TTest.Create; // there is no Create method
t.Caption := 'Hello';
t.Execute;
end;
它也没有问题。
如果我将声明更改为TTest = class
,我必须实例化该对象,否则我会在表单销毁时获得AV。
如何和为什么有效?使用这样的" class"是否常见且安全。没有任何实例?它是一个类还是像现代Delphi记录?
请帮我澄清一下这个问题。
感谢。