実行時型情報(Object Pascal)

提供: Appmethod Topics
移動先: 案内検索

Object Pascal コンパイラ指令のリスト:インデックス への移動

種類

スイッチ

構文

{$M+} または {$M-}

{$TYPEINFO ON} または {$TYPEINFO OFF}

デフォルト

{$M-}

{$TYPEINFO OFF}

スコープ

ローカル



{$M} スイッチ指令は、実行時型情報(RTTI)の生成を制御するものです。クラスが {$M+} の状態で宣言される場合、または、{$M+} の状態で宣言されたクラスから派生する場合は、published セクションで宣言されているプロパティやイベントの実行時型情報がコンパイラにより生成されます。クラスが {$M+} の状態で宣言されていて、かつ、{$M} の状態で宣言されたクラスから派生しない場合は、そのクラスで published セクションは使用できません。なお、クラスを前方宣言する場合、そのクラスの最初の宣言は、$M スイッチを指定して宣言する必要があります。

$M スイッチを使用してインターフェイスを宣言すると、コンパイラにより、すべてのプロパティの実行時型情報が生成されます。つまり、インターフェイスの場合、メンバはすべて published 可視性を持っているかのように扱われます。

メモ: コンポーネント ライブラリの Classes ユニットに定義されている TPersistent クラスは {$M+} の状態で宣言されているため、TPersistent から派生したクラスはいずれも published セクションの RTTI が生成されることになります。コンポーネント ライブラリでは、published セクションに対して生成されたこの実行時型情報を使用して、フォーム ファイルの保存時や読み込み時にコンポーネントのプロパティ値にアクセスします。さらに、IDE では、コンポーネントの実行時型情報を使用して、[オブジェクト インスペクタ]に表示するプロパティのリストを決定します。

メモ: System ユニットに定義されている IInvokable インターフェイスは {$M+} の状態で宣言されているため、IInvokable から派生したインターフェイスはいずれも RTTI が生成されることになります。IntfInfo ユニットに定義されているルーチンを使用して、これらの RTTI を取得できます。

アプリケーションで {$M} コンパイラ スイッチを直接使用する必要はほとんどありません。

関連項目