実行時型情報(Delphi)
Delphi コンパイラ指令のリスト:インデックス への移動
種類 |
スイッチ |
構文 |
{$M+} または {$M-} {$TYPEINFO ON} または {$TYPEINFO OFF} |
デフォルト |
{$M-} {$TYPEINFO OFF} |
スコープ |
ローカル |
{$M} スイッチ指令は、実行時型情報(RTTI)の生成を制御します。クラスが {$M+} の状態で宣言された場合、または、{$M+} の状態で宣言されたクラスから派生した場合に、コンパイラは、published セクションで宣言されているプロパティやイベントの、実行時型情報を生成します。あるクラスが {$M+} の状態で選択されているが、{$M} の状態で宣言されているクラスから派生しているわけではない場合、そのクラスで published セクションは使用できません。クラスを forward 宣言する場合、クラスの最初の宣言は、$M スイッチで宣言される必要があります。
インターフェイスの宣言に $M スイッチを使用した場合、コンパイラは、すべてのプロパティの実行時型情報を生成します。つまり、インターフェイスの場合、すべてのメンバーが公開されているように処理されます。
メモ: コンポーネント ライブラリの Classes ユニットで定義されている TPersistent クラスは、{$M+} の状態で宣言されているため、TPersistent からの派生クラスはいずれも、published セクションに対して生成された RTTI を保有することとなります。コンポーネント ライブラリは、published セクションに対して生成された、この実行時型情報を使い、フォーム ファイルを保存またはロードする際に、コンポーネントのプロパティ値にアクセスします。さらに、IDE はコンポーネントの実行時型情報を使用して、オブジェクト インスペクタに表示するプロパティのリストを決定します。
メモ: System ユニットで定義されている IInvokable インターフェイスは、{$M+} の状態で宣言されているため、IInvokable からの派生インターフェイスはいずれも RTTI を保有することとなります。IntfInfo ユニット内のルーチンは、RTTI の抽出に使用されます。
アプリケーションが直接 {$M} コンパイラ スイッチを使用する必要は、ほとんどありません。