【发布时间】:2013-05-16 23:06:18
【问题描述】:
因为它与德尔福有关......
当一个变量被声明为某种类型时,它是否被初始化为该类型的一个 OBJECT?还是必须为变量分配一个返回该类型对象的表达式?
我来自强大的 Java 背景。我想问的是这个... 在 Java 中,假设您声明了一个名为 Orange 的用户定义类型的实例变量。看起来像这样:
private Orange _fruit;
变量 _fruit 仍然持有对 null 的引用,直到实际分配了 Orange 类的实例,如下所示:
_fruit = new Orange();
如果我在 Delphi 中声明一个 TForm 类型的变量,如下所示:
var
Form : TForm;
Form 是否初始化为 TForm 对象?还是还是 nil?
我之所以问,是因为我在尝试编译如下所示的一小段代码时遇到错误:
这里是主要单元:
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?但是,我尝试在 ShowForm2Click 过程中放置“SecondForm.Create”,但我得到了同样的错误。我是否因为 SecondForm 未分配而收到此错误?需要初始化吗?还是这样?
注意: 我是德尔福的三天新手。请体谅。
【问题讨论】:
标签: delphi variable-assignment variable-initialization