クラスとは、フィールド、メソッド、およびプロパティからなる構造を定義したものです。オブジェクトはクラスから生成した「もの」だと考えると分かり易いかもしれません。ですから、オブジェクトを生成することを「クラスのオブジェクト化」と呼ばれることがあります。
オブジェクトを生成する場合には、コンストラクタを使用します。これによりオブジェクトの生成と、フィールドの初期化が行われる事になります。また、生成したオブジェクトは、不要になったら明示的に破棄しなければなりません。オブジェクトの破棄には、デストラクタを使用します。ここでは実際に、オブジェクトの生成、破棄についての例をみてみましょう。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
TMyClass = class(TObject)
FBook: string;
procedure InputBook;
procedure ShowBook;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TMyClass }
procedure TMyClass.InputBook;
begin
FBook := InputBox('本のタイトル', 'タイトルを入力して下さい。', 'Delphi');
end;
procedure TMyClass.ShowBook;
begin
ShowMessage('タイトルは ' + FBook);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
MyClass: TMyClass;
begin
MyClass := TMyClass.Create; // コンストラクタの呼び出し
MyClass.InputBook; // メソッドにアクセスする場合は、.(ドット)
MyClass.ShowBook; // を使用します。
MyClass.Free; // デストラクタの呼び出し
end;
まず、
MyClass: TMyClass
に注目して下さい。このように TMyClass 型の変数 MyClass を宣言しましたが、このままでは実際使う事は出来ません。これは単に MyClass が TMyClass 型のオブジェクトへの参照を保持できる変数であるという意味しかもちません。つまり、単なる宣言をしているだけです。ですから、まずコンストラクタを呼び出してオブジェクトの生成を行う必要があります。それを、
MyClass := TMyClass.Create;
で行っています。
次に、メソッド InputBook を呼び出しています。このように、メソッドを呼び出す場合には . (ドット) を使用してアクセスしてやります。次の行の ShowBook についても同じです。 そして、最後にデストラクタを呼び出しオブジェクトの破棄を行います。