Delphi に関しては...
変数が特定の型を宣言するとき、その型の OBJECT に初期化されますか? それとも、その型のオブジェクトを返す式を変数に割り当てる必要がありますか?
私は強力な Java のバックグラウンドを持っています。私が聞きたいのはこれです... Javaで、Orangeという名前のユーザー定義型のインスタンス変数を宣言するとします。これは次のようになります。
private Orange _fruit;
次のように、実際に Orange クラスのインスタンスが割り当てられるまで、変数 _fruit は null への参照を保持します。
_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.
ここに2番目のユニットがあります:
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 を使い始めて 3 日目です。その点、ご配慮ください。