スコープと限定子

提供: RAD Studio
移動先: 案内検索

オブジェクト モデルの利用:インデックス への移動

スコープによって,オブジェクトのフィールド,プロパティ,およびメソッドのアクセス可能性が決まります。クラスで宣言されたすべてのメンバーは,そのクラスで利用可能です。また,この後に説明がありますが,多くの場合,その下位クラスでも利用可能です。メソッドの実装コードはクラス宣言の外にありますが,クラス宣言の中でメソッドが宣言されるので,やはりメソッドもそのクラスのスコープ内にあります。

クラスのプロパティ,メソッド,またはフィールドを参照するメソッドの実装コードを書く場合,そのメソッドが宣言されているクラス内では,各識別子の前にクラス名を指定する必要はありません。たとえば,新しいフォームにボタンを 1 つ挿入したとすると,このボタンの OnClick イベントのイベントハンドラは次のように記述できます。

procedure TForm1.Button1Click(Sender: TObject);
begin
  Color := clFuchsia;
  Button1.Color := clLime;
end;

上の 1 番めの文は次の文と同等です。

Form1.Color := clFuchsia

Color プロパティの前に限定子 Form1 を置く必要はありません。Button1Click メソッドは TForm1 オブジェクトのスコープ内にあるからです。つまり,呼び出したメソッド本体の中にある限定子は,TForm1 インスタンスのスコープの範囲内にあります。これに対して,2 番めの文はボタンオブジェクトの色(イベントハンドラを宣言したフォームの色ではない)を参照しているので,限定子を付ける必要があります。

IDE は,各フォームごとに個別のユニット(ソースコード)ファイルを作成します。あるフォームのユニットファイルから別のフォームにアクセスする場合は,次の例に示すように,コンポーネント名に限定子を付ける必要があります。

Form2.Edit1.Color := clLime;

同じ方法で,ほかのフォームからもコンポーネントのメソッドにアクセスできます。次に例を示します。

Form2.Edit1.Clear;

Form1 のユニットファイルから Form2 のコンポーネントにアクセスするには,Form1 ユニットの uses 節に Form2 のユニットを追加します。

クラスのスコープは,その下位クラスにまで拡張されます。ただし,下位クラスの中でフィールド,プロパティ,またはメソッドを再宣言することもできます。下位オブジェクトの中で再宣言すると,継承したメンバーが隠蔽またはオーバーライドされます。

関連項目