OpCodes.Ldflda フィールド

参照が現在評価スタック上にあるオブジェクト内のフィールドのアドレスを検索します。

Public Shared ReadOnly Ldflda As OpCode
[C#]
public static readonly OpCode Ldflda;
[C++]
public: static OpCode Ldflda;
[JScript]
public static var Ldflda : OpCode;

解説

命令の 16 進数の形式、MSIL (Microsoft Intermediate Language) アセンブリ形式、および簡単な説明の一覧を次の表に示します。

形式 アセンブリ形式 説明
7C < T > ldflda field 指定したオブジェクト内の field のアドレスをスタックにプッシュします。

スタックの遷移動作を順番に示すと、次のようになります。

  1. オブジェクト参照 (またはポインタ) がスタックにプッシュされます。
  2. オブジェクト参照 (またはポインタ) がスタックからポップされます。オブジェクト内の指定したフィールドのアドレスが検索されます。
  3. フィールドに格納されているアドレスがスタックにプッシュされます。

ldflda 命令は、オブジェクト内で見つかったフィールドのアドレスをスタックにプッシュします。オブジェクトは、オブジェクト参照 (O 型)、マネージ ポインタ (& 型)、アンマネージ ポインタ (natural int 型)、遷移ポインタ (* 型)、または値型のインスタンスとしてスタック上に存在している必要があります。確認可能なコードでは、アンマネージ ポインタは使用できません。オブジェクトのフィールドは、フィールド メンバを必ず参照しているメタデータ トークンによって指定されます。

ldflda によって返される値は、マネージ ポインタ (& 型) です。ただし、オブジェクトがアンマネージ ポインタとしてスタックにプッシュされる場合を除きます。この場合は、返されるアドレスもアンマーネージ ポインタ (natural int 型) になります。

ldflda 命令は、直前に Unaligned プリフィックスと Volatile プリフィックスのどちらかまたは両方を付けることができます。

オブジェクトが、そのオブジェクトのアクセス元であるアプリケーション ドメイン内にない場合は、 InvalidOperationException がスローされます。アクセス元のアプリケーション ドメイン内にないフィールドのアドレスは、読み込むことができません。

オブジェクトが null であり、フィールドが静的ではない場合は、 NullReferenceException がスローされます。

指定したフィールドがメタデータ内で見つからない場合は、 MissingFieldException がスローされます。これは、通常、実行時ではなく、MSIL (Microsoft Intermediate Language) 命令がネイティブ コードに変換されるときにチェックされます。

ldflda オペコードを使用できる Emit コンストラクタ オーバーロードを次に示します。

  • ILGenerator.Emit(OpCode, FieldInfo)

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

参照

OpCodes クラス | OpCodes メンバ | System.Reflection.Emit 名前空間