정보
요청한 주제가 아래에 표시됩니다. 그러나 이 주제는 이 라이브러리에 포함되지 않습니다.

DynamicMethod.GetILGenerator 메서드 (Int32)

2013-12-13

지정된 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

Windows Phone

표시: