このページは役に立ちましたか。
このページのコンテンツについての ご意見をお待ちしております
その他にご意見はありますか。
残り 1500 文字
エクスポート (0) 印刷
すべて展開
情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

DynamicMethod.GetILGenerator メソッド (Int32)

2013/12/12

指定された MSIL (Microsoft Intermediate Language) ストリーム サイズを使用して、このメソッドに対応する MSIL ジェネレーターを返します。

Namespace:  System.Reflection.Emit
アセンブリ:  mscorlib (mscorlib.dll 内)

public ILGenerator GetILGenerator(
	int streamSize
)

パラメーター

streamSize
型: System.Int32
MSIL ストリームのサイズ (バイト単位)。

戻り値

型: System.Reflection.Emit.ILGenerator
MSIL ストリームの指定したサイズを使用するメソッドの ILGenerator オブジェクト。

CreateDelegate メソッドまたは Invoke メソッドを呼び出して動的メソッドを完了すると、MSIL をさらに追加しようとしても無視されます。例外はスローされません。

このメソッド オーバーロードを次のコード例に示します。このコード例は、DynamicMethod クラスのトピックで取り上げているコード例の一部分です。


// Create an array that specifies the parameter types of the
// overload of String.Format to be used in Hello.
Type[] formatStringArgs = { typeof(string), typeof(object), typeof(object), 
                           typeof(object) };
// Get the overload of String.Format that has one String 
// parameter for the format, and three object parameters.
MethodInfo formatString = typeof(String).GetMethod("Format",
    formatStringArgs);

// Get an ILGenerator and emit a body for the dynamic method,
// using a stream size larger than the IL that will be
// emitted.
ILGenerator il = hello.GetILGenerator(256);
// Push the format string for String.Format on the stack.
il.Emit(OpCodes.Ldstr, "Hello, {0}, {1} squared is {2}!");
// Load the first argument, which is a string, onto the stack,
// as the second argument of String.Format.
il.Emit(OpCodes.Ldarg_0);
// Load the second argument, and box it. This is the third argument
// of String.Format, and because it is a value type it must be boxed
// in order to pass it as an object.
il.Emit(OpCodes.Ldarg_1);
il.Emit(OpCodes.Box, typeof(int));
// Load the second argument twice more, as the arguments of the 
// multiply operation that will square it. 
il.Emit(OpCodes.Ldarg_1);
il.Emit(OpCodes.Ldarg_1);
// Multiply the last two arguments on the stack, leaving the 
// result on the stack. The result must be boxed, so it can be passed
// as the fourth argument of String.Format.
il.Emit(OpCodes.Mul);
il.Emit(OpCodes.Box, typeof(int));
// Call the overload of String.Format that prints a string, formatting
// it to include the next three objects on the stack.
il.Emit(OpCodes.Call, formatString);
// The Hello method returns the formatted string, which is already
// on the stack after the call to String.Format.
il.Emit(OpCodes.Ret);


Windows Phone OS

サポート: 8.0, 7.1

表示:
© 2015 Microsoft