Exportar (0) Imprimir
Expandir todo
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

MethodBuilder.CreateMethodBody (Método)

Crea el cuerpo del método mediante una matriz de bytes especificada de las instrucciones máquina del Lenguaje intermedio de Microsoft (MSIL).

Espacio de nombres:  System.Reflection.Emit
Ensamblado:  mscorlib (en mscorlib.dll)

public void CreateMethodBody(
	byte[] il,
	int count
)

Parámetros

il
Tipo: System.Byte[]
Matriz que contiene instrucciones del MSIL válidas. Si este parámetro es null, se elimina el cuerpo del método.
count
Tipo: System.Int32
Número de bytes válidos de la matriz en MSIL. Este valor se omite si MSIL es null.

ExcepciónCondición
ArgumentOutOfRangeException

count no se encuentra dentro del intervalo de índices de la matriz de instrucciones en MSIL proporcionada y il no es null.

InvalidOperationException

El tipo contenedor se ha creado previamente utilizando CreateType.

O bien

Se llamó previamente a este método en este MethodBuilder con un argumento il que no era null.

O bien

Para el método actual, el valor de la propiedad IsGenericMethod es true, pero el valor de la propiedad IsGenericMethodDefinition es false.

Este método crea el cuerpo del método a partir de il, una matriz que contiene instrucciones máquina de MSIL como códigos de operación. El número de bytes del MSIL válido viene proporcionado por count.

NotaNota

Actualmente no es totalmente compatible. El usuario no puede proporcionar la ubicación de correcciones de símbolos (token) y de controladores de excepciones.

En el ejemplo que se incluye a continuación, se genera un método simple que suma dos enteros a través de un código de operación que utiliza CreateMethodBody.



using System;
using System.Threading;
using System.Reflection;
using System.Reflection.Emit;

class MethodBodyDemo {
// This class will demonstrate how to create a method body using 
// the MethodBuilder.CreateMethodBody(byte[], int) method.

   public static Type BuildDynType() {

  	Type addType = null;

    	AppDomain currentDom = Thread.GetDomain();

        AssemblyName myAsmName = new AssemblyName();
	myAsmName.Name = "MyDynamicAssembly";

        AssemblyBuilder myAsmBldr = currentDom.DefineDynamicAssembly(
					       myAsmName,
					       AssemblyBuilderAccess.RunAndSave);

        // The dynamic assembly space has been created.  Next, create a module
        // within it.  The type Point will be reflected into this module.

	ModuleBuilder myModuleBldr = myAsmBldr.DefineDynamicModule("MyModule");

	TypeBuilder myTypeBldr =  myModuleBldr.DefineType("Adder");

        MethodBuilder myMthdBldr = myTypeBldr.DefineMethod("DoAdd",
							    MethodAttributes.Public |
							    MethodAttributes.Static,
							    typeof(int),
							    new Type[] 
							    {typeof(int), typeof(int)});
        // Build the array of Bytes holding the MSIL instructions.

        byte[] ILcodes = new byte[] {
          0x02,   /* 02h is the opcode for ldarg.0 */
	  0x03,   /* 03h is the opcode for ldarg.1 */
	  0x58,   /* 58h is the opcode for add     */
	  0x2A    /* 2Ah is the opcode for ret     */
	};
	
	myMthdBldr.CreateMethodBody(ILcodes, ILcodes.Length);

        addType = myTypeBldr.CreateType();

	return addType;
   }

   public static void Main() {

	Type myType = BuildDynType(); 
        Console.WriteLine("---");
	Console.Write("Enter the first integer to add: "); 
        int aVal = Convert.ToInt32(Console.ReadLine());

     	Console.Write("Enter the second integer to add: ");
     	int bVal = Convert.ToInt32(Console.ReadLine());

     	object adderInst = Activator.CreateInstance(myType, new object[0]); 

	Console.WriteLine("The value of adding {0} to {1} is: {2}.",
			   aVal, bVal,	
     			   myType.InvokeMember("DoAdd",
			  		       BindingFlags.InvokeMethod,
			  		       null,
			  		       adderInst,
			  		       new object[] {aVal, bVal})); 
   }

}



.NET Framework

Compatible con: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Compatible con: 4, 3.5 SP1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (no se admite el rol Server Core), Windows Server 2008 R2 (se admite el rol Server Core con SP1 o versiones posteriores; no se admite Itanium)

.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft