没有Create的Delphi对象?

时间:2017-11-18 07:51:34

标签: delphi delphi-7

我已下载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记录?

请帮我澄清一下这个问题。

感谢。

0 个答案:

没有答案