gpt4 book ai didi

delphi - 了解 Delphi 变量声明/初始化

转载 作者:行者123 更新时间:2023-12-03 15:19:07 24 4
gpt4 key购买 nike

与德尔福有关...

当声明某个类型的变量时,它是否被初始化为该类型的 OBJECT?或者必须为变量分配一个返回该类型对象的表达式?

我拥有深厚的 Java 背景。我想问的是这个...在 Java 中,假设您声明了一个名为 Orange 的用户定义类型的实例变量。看起来像这样:

private Orange _fruit;

变量 _fruit 仍然保留对 null 的引用,直到实际分配 Orange 类的实例,如下所示:

_fruit = new Orange();

在 Delphi 中,如果我声明一个 TForm 类型的变量,如下所示:

var
Form : TForm;

Form 是否初始化为 TForm 对象?还是仍然为零?

我问这个问题是因为我在尝试编译一小段代码时遇到错误,如下所示:

这是主要单元:

unit Main;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils,
System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Second;

type
TForm1 = class(TForm)
ShowForm2: TButton;
procedure ShowForm2Click(Sender: TObject);
end;

var
Form1: TForm1;
SecondForm : TSecondForm;

implementation

{$R *.dfm}

procedure TForm1.ShowForm2Click(Sender: TObject);
begin
SecondForm.ShowModal;
end;
end.

这是第二个单元:

unit Second;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
Vcl.StdCtrls;

type
TSecondForm = class(TForm)
Label1: TLabel;
end;

var
SecondForm: TSecondForm;

implementation

{$R *.dfm}

end.

当我尝试编译时遇到的错误正是:“模块‘Multiple.exe’中地址 005B17F9 处的访问冲突。读取地址 00000000。”我在想这是因为我没有以某种方式初始化 Main 单元中的变量 SecondForm?但是,我尝试将“SecondForm.Create”放入 ShowForm2Click 过程中,但出现了相同的错误。我收到此错误是因为 SecondForm 未分配吗?是否需要初始化?或者是吗?

注意:我刚接触德尔福三天。请考虑这一点。

最佳答案

SecondForm.Create是错误的语法。 Delphi 中的构造函数很特殊。您可以将它们或多或少地视为类方法。调用它们的方式如下:

variable := ClassType.Create(arguments);

虽然可以像实例方法 ( variable.Create ) 一样调用构造函数,但这是针对一个特定用例的,不应在一般代码中执行。在对象上调用构造函数而不是类型的原因是如果您已经在该对象的构造函数内。(即,如果您在该对象上有多个构造函数并且其中之一调用另一个,或者通过使用 inherited Create(arguments); 调用父类的构造函数来初始化祖先类的成员)

您所做的,在不在该对象的另一个构造函数内时调用该对象的构造函数,可能会引发编译器警告(如果不是错误),但不幸的是它没有。

关于delphi - 了解 Delphi 变量声明/初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16598931/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com