Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Clase ConstructorBuilder

 

Publicado: octubre de 2016

Define y representa un constructor de una clase dinámica.

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

System.Object
  System.Reflection.MemberInfo
    System.Reflection.MethodBase
      System.Reflection.ConstructorInfo
        System.Reflection.Emit.ConstructorBuilder

[ClassInterfaceAttribute(ClassInterfaceType.None)]
[ComVisibleAttribute(true)]
[HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)]
public sealed class ConstructorBuilder : ConstructorInfo, _ConstructorBuilder

NombreDescripción
System_CAPS_pubpropertyAttributes

Recupera los atributos de este método.(Invalida MethodBase.Attributes).

System_CAPS_pubpropertyCallingConvention

Obtiene un valor CallingConventions que depende de si el tipo declarativo es genérico.(Invalida MethodBase.CallingConvention).

System_CAPS_pubpropertyContainsGenericParameters

Obtiene un valor que indica si el método genérico contiene parámetros de tipo genérico sin asignar.(Heredado de MethodBase).

System_CAPS_pubpropertyCustomAttributes

Obtiene una colección que contiene los atributos personalizados de este miembro.(Heredado de MemberInfo).

System_CAPS_pubpropertyDeclaringType

Recupera una referencia al objeto Type para el tipo que declara este miembro.(Invalida MemberInfo.DeclaringType).

System_CAPS_pubpropertyInitLocals

Obtiene o establece si las variables locales de este constructor deben inicializarse en cero.

System_CAPS_pubpropertyIsAbstract

Obtiene un valor que indica si el método es abstracto.(Heredado de MethodBase).

System_CAPS_pubpropertyIsAssembly

Obtiene un valor que indica si la visibilidad posible de este método o constructor MethodAttributes.Assembly; es decir, el método o constructor es visible como mucho para otros tipos del mismo ensamblado y derivada no es visible para los tipos fuera del ensamblado.(Heredado de MethodBase).

System_CAPS_pubpropertyIsConstructor

Obtiene un valor que indica si el método es un constructor.(Heredado de MethodBase).

System_CAPS_pubpropertyIsFamily

Obtiene un valor que indica si la visibilidad de este método o constructor MethodAttributes.Family; es decir, el método o constructor es visible dentro de su clase y clases derivadas.(Heredado de MethodBase).

System_CAPS_pubpropertyIsFamilyAndAssembly

Obtiene un valor que indica si la visibilidad de este método o constructor MethodAttributes.FamANDAssem; es decir, el método o constructor puede llamarse mediante las clases derivadas, pero solo si están en el mismo ensamblado.(Heredado de MethodBase).

System_CAPS_pubpropertyIsFamilyOrAssembly

Obtiene un valor que indica si la visibilidad posible de este método o constructor MethodAttributes.FamORAssem; es decir, el método o constructor puede llamarse clases derivadas dondequiera que estén y clases en el mismo ensamblado.(Heredado de MethodBase).

System_CAPS_pubpropertyIsFinal

Obtiene un valor que indica si este método es final.(Heredado de MethodBase).

System_CAPS_pubpropertyIsGenericMethod

Obtiene un valor que indica si el método es genérico.(Heredado de MethodBase).

System_CAPS_pubpropertyIsGenericMethodDefinition

Obtiene un valor que indica si el método es una definición de método genérico.(Heredado de MethodBase).

System_CAPS_pubpropertyIsHideBySig

Obtiene un valor que indica si solo un miembro del mismo tipo y con exactamente la misma firma está oculto en la clase derivada.(Heredado de MethodBase).

System_CAPS_pubpropertyIsPrivate

Obtiene un valor que indica si este miembro es privado.(Heredado de MethodBase).

System_CAPS_pubpropertyIsPublic

Obtiene un valor que indica si se trata de un método público.(Heredado de MethodBase).

System_CAPS_pubpropertyIsSecurityCritical

Obtiene un valor que indica si el constructor o el método actual es crítico para la seguridad o crítico para la seguridad en el nivel de confianza actual y, por tanto, puede realizar operaciones críticas.(Heredado de MethodBase).

System_CAPS_pubpropertyIsSecuritySafeCritical

Obtiene un valor que indica si el método actual o el constructor es crítico para la seguridad en el nivel de confianza actual; es decir, si puede realizar operaciones críticas y puede obtenerse acceso desde código transparente.(Heredado de MethodBase).

System_CAPS_pubpropertyIsSecurityTransparent

Obtiene un valor que indica que si el constructor o el método actual es transparente en la relación de confianza actual nivel y, por tanto, no puede realizar operaciones críticas.(Heredado de MethodBase).

System_CAPS_pubpropertyIsSpecialName

Obtiene un valor que indica si este método tiene un nombre especial.(Heredado de MethodBase).

System_CAPS_pubpropertyIsStatic

Obtiene un valor que indica si el método es static.(Heredado de MethodBase).

System_CAPS_pubpropertyIsVirtual

Obtiene un valor que indica si el método es virtual.(Heredado de MethodBase).

System_CAPS_pubpropertyMemberType

Obtiene un valor de MemberTypes que indica que este miembro es un constructor.(Heredado de ConstructorInfo).

System_CAPS_pubpropertyMetadataToken

Obtiene un valor que identifica un elemento de metadatos.(Heredado de MemberInfo).

System_CAPS_pubpropertyMethodHandle

Recupera el identificador interno para el método. Use este identificador para tener acceso al identificador de metadatos subyacente.(Invalida MethodBase.MethodHandle).

System_CAPS_pubpropertyMethodImplementationFlags

Obtiene el MethodImplAttributes marcas que especifican los atributos de una implementación de método.(Heredado de MethodBase).

System_CAPS_pubpropertyModule

Obtiene el módulo dinámico en el que se define este constructor.(Invalida MemberInfo.Module).

System_CAPS_pubpropertyName

Recupera el nombre de este constructor.(Invalida MemberInfo.Name).

System_CAPS_pubpropertyReflectedType

Contiene una referencia al objeto Type del que se obtuvo este objeto.(Invalida MemberInfo.ReflectedType).

System_CAPS_pubpropertyReturnType

Obsoleto. Obtiene null.

System_CAPS_pubpropertySignature

Recupera la firma del campo en el formulario de una cadena.

NombreDescripción
System_CAPS_pubmethodAddDeclarativeSecurity(SecurityAction, PermissionSet)

Agrega seguridad declarativa a este constructor.

System_CAPS_pubmethodDefineParameter(Int32, ParameterAttributes, String)

Define un parámetro de este constructor.

System_CAPS_pubmethodEquals(Object)

Devuelve un valor que indica si esta instancia equivale al objeto especificado. (Heredado de ConstructorInfo).

System_CAPS_pubmethodGetCustomAttributes(Boolean)

Devuelve todos los atributos personalizados definidos para este constructor.(Invalida MemberInfo.GetCustomAttributes(Boolean)).

System_CAPS_pubmethodGetCustomAttributes(Type, Boolean)

Devuelve los atributos personalizados identificados por el tipo proporcionado.(Invalida MemberInfo.GetCustomAttributes(Type, Boolean)).

System_CAPS_pubmethodGetCustomAttributesData()

Devuelve una lista de CustomAttributeData objetos que representan datos sobre los atributos que se han aplicado al miembro de destino.(Heredado de MemberInfo).

System_CAPS_pubmethodGetGenericArguments()

Devuelve una matriz de objetos Type que representan los argumentos de tipo de un método genérico o los parámetros de tipo de una definición de método genérico.(Heredado de MethodBase).

System_CAPS_pubmethodGetHashCode()

Devuelve el código hash de esta instancia.(Heredado de ConstructorInfo).

System_CAPS_pubmethodGetILGenerator()

Obtiene un ILGenerator para este constructor.

System_CAPS_pubmethodGetILGenerator(Int32)

Obtiene un objeto ILGenerator, con el tamaño de secuencia MSIL especificado, que puede usarse para crear un cuerpo de método para este constructor.

System_CAPS_pubmethodGetMethodBody()

Cuando se invalida en una clase derivada, obtiene un MethodBody objeto que proporciona acceso a la secuencia MSIL, las variables locales y las excepciones del método actual.(Heredado de MethodBase).

System_CAPS_pubmethodGetMethodImplementationFlags()

Devuelve los marcadores de implementación del método para este constructor.(Invalida MethodBase.GetMethodImplementationFlags()).

System_CAPS_pubmethodGetModule()

Devuelve una referencia al módulo que contiene este constructor.

System_CAPS_pubmethodGetParameters()

Devuelve los parámetros de este constructor.(Invalida MethodBase.GetParameters()).

System_CAPS_pubmethodGetToken()

Devuelve el MethodToken que representa el token para este constructor.

System_CAPS_pubmethodGetType()

Obtiene el Type de la instancia actual.(Heredado de Object).

System_CAPS_pubmethodInvoke(BindingFlags, Binder, Object[], CultureInfo)

Invoca al constructor reflejado dinámicamente por esta instancia en el objeto dado, pasando los parámetros especificados y considerando las restricciones del enlazador facilitado.(Invalida ConstructorInfo.Invoke(BindingFlags, Binder, Object[], CultureInfo)).

System_CAPS_pubmethodInvoke(Object, BindingFlags, Binder, Object[], CultureInfo)

Invoca dinámicamente el constructor reflejado por esta instancia con los argumentos especificados, bajo las restricciones del objeto Binder especificado.(Invalida MethodBase.Invoke(Object, BindingFlags, Binder, Object[], CultureInfo)).

System_CAPS_pubmethodInvoke(Object, Object[])

Invoca el método o constructor representado por la instancia actual, utilizando los parámetros especificados.(Heredado de MethodBase).

System_CAPS_pubmethodInvoke(Object[])

Invoca al constructor reflejado por la instancia que tiene los parámetros especificados, proporcionando valores predeterminados para los parámetros que no se usan habitualmente.(Heredado de ConstructorInfo).

System_CAPS_pubmethodIsDefined(Type, Boolean)

Comprueba si se define el tipo de atributo personalizado especificado.(Invalida MemberInfo.IsDefined(Type, Boolean)).

System_CAPS_pubmethodSetCustomAttribute(ConstructorInfo, Byte[])

Establece un atributo personalizado mediante un blob de atributo personalizado especificado.

System_CAPS_pubmethodSetCustomAttribute(CustomAttributeBuilder)

Establece un atributo personalizado mediante un generador de atributos personalizado.

System_CAPS_pubmethodSetImplementationFlags(MethodImplAttributes)

Establece las marcas de implementación de método para este constructor.

System_CAPS_pubmethodSetMethodBody(Byte[], Int32, Byte[], IEnumerable<ExceptionHandler>, IEnumerable<Int32>)

Crea el cuerpo del constructor con una matriz de bytes especificada de instrucciones de Lenguaje intermedio de Microsoft (MSIL).

System_CAPS_pubmethodSetSymCustomAttribute(String, Byte[])

Establece el atributo personalizado de este constructor asociado a la información simbólica.

System_CAPS_pubmethodToString()

Devuelve esta instancia de ConstructorBuilder como String.(Invalida Object.ToString()).

NombreDescripción
System_CAPS_pubinterfaceSystem_CAPS_privmethod_ConstructorBuilder.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Asigna un conjunto de nombres a un conjunto correspondiente de identificadores de envío.

System_CAPS_pubinterfaceSystem_CAPS_privmethod_ConstructorBuilder.GetTypeInfo(UInt32, UInt32, IntPtr)

Recupera la información de tipo de un objeto, que se puede usar después para obtener la información de tipo de una interfaz.

System_CAPS_pubinterfaceSystem_CAPS_privmethod_ConstructorBuilder.GetTypeInfoCount(UInt32)

Recupera el número de interfaces de tipo de información que suministra un objeto (0 ó 1)

System_CAPS_pubinterfaceSystem_CAPS_privmethod_ConstructorBuilder.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Proporciona acceso a las propiedades y los métodos expuestos por un objeto.

System_CAPS_pubinterfaceSystem_CAPS_privmethod_ConstructorInfo.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Asigna un conjunto de nombres a un conjunto correspondiente de identificadores de envío.(Heredado de ConstructorInfo).

System_CAPS_pubinterfaceSystem_CAPS_privmethod_ConstructorInfo.GetType()

Obtiene un objeto Type que representa el tipo de ConstructorInfo.(Heredado de ConstructorInfo).

System_CAPS_pubinterfaceSystem_CAPS_privmethod_ConstructorInfo.GetTypeInfo(UInt32, UInt32, IntPtr)

Recupera la información de tipo de un objeto, que se puede usar después para obtener la información de tipo de una interfaz.(Heredado de ConstructorInfo).

System_CAPS_pubinterfaceSystem_CAPS_privmethod_ConstructorInfo.GetTypeInfoCount(UInt32)

Recupera el número de interfaces de tipo de información que suministra un objeto (0 ó 1)

(Heredado de ConstructorInfo).

System_CAPS_pubinterfaceSystem_CAPS_privmethod_ConstructorInfo.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Proporciona acceso a las propiedades y los métodos expuestos por un objeto.(Heredado de ConstructorInfo).

System_CAPS_pubinterfaceSystem_CAPS_privmethod_ConstructorInfo.Invoke_2(Object, BindingFlags, Binder, Object[], CultureInfo)

Proporciona objetos COM acceso independiente de la versión del MethodBase.Invoke(Object, BindingFlags, Binder, Object[], CultureInfo) (método).(Heredado de ConstructorInfo).

System_CAPS_pubinterfaceSystem_CAPS_privmethod_ConstructorInfo.Invoke_3(Object, Object[])

Proporciona objetos COM acceso independiente de la versión del MethodBase.Invoke(Object, Object[]) (método).(Heredado de ConstructorInfo).

System_CAPS_pubinterfaceSystem_CAPS_privmethod_ConstructorInfo.Invoke_4(BindingFlags, Binder, Object[], CultureInfo)

Proporciona objetos COM acceso independiente de la versión del ConstructorInfo.Invoke(BindingFlags, Binder, Object[], CultureInfo) (método).(Heredado de ConstructorInfo).

System_CAPS_pubinterfaceSystem_CAPS_privmethod_ConstructorInfo.Invoke_5(Object[])

Proporciona objetos COM acceso independiente de la versión del ConstructorInfo.Invoke(Object[]) (método).(Heredado de ConstructorInfo).

System_CAPS_pubinterfaceSystem_CAPS_privmethod_MemberInfo.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Asigna un conjunto de nombres a un conjunto correspondiente de identificadores de envío.(Heredado de MemberInfo).

System_CAPS_pubinterfaceSystem_CAPS_privmethod_MemberInfo.GetType()

Obtiene un Type objeto que representa la MemberInfo clase.(Heredado de MemberInfo).

System_CAPS_pubinterfaceSystem_CAPS_privmethod_MemberInfo.GetTypeInfo(UInt32, UInt32, IntPtr)

Recupera la información de tipo de un objeto, que se puede usar después para obtener la información de tipo de una interfaz.(Heredado de MemberInfo).

System_CAPS_pubinterfaceSystem_CAPS_privmethod_MemberInfo.GetTypeInfoCount(UInt32)

Recupera el número de interfaces de tipo de información que suministra un objeto (0 ó 1)

(Heredado de MemberInfo).

System_CAPS_pubinterfaceSystem_CAPS_privmethod_MemberInfo.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Proporciona acceso a las propiedades y los métodos expuestos por un objeto.(Heredado de MemberInfo).

System_CAPS_pubinterfaceSystem_CAPS_privmethod_MethodBase.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Asigna un conjunto de nombres a un conjunto correspondiente de identificadores de envío.(Heredado de MethodBase).

System_CAPS_pubinterfaceSystem_CAPS_privmethod_MethodBase.GetType()

Para una descripción de este miembro, vea _MethodBase.GetType.(Heredado de MethodBase).

System_CAPS_pubinterfaceSystem_CAPS_privmethod_MethodBase.GetTypeInfo(UInt32, UInt32, IntPtr)

Recupera la información de tipo de un objeto, que se puede usar después para obtener la información de tipo de una interfaz.(Heredado de MethodBase).

System_CAPS_pubinterfaceSystem_CAPS_privmethod_MethodBase.GetTypeInfoCount(UInt32)

Recupera el número de interfaces de tipo de información que suministra un objeto (0 ó 1)

(Heredado de MethodBase).

System_CAPS_pubinterfaceSystem_CAPS_privmethod_MethodBase.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Proporciona acceso a las propiedades y los métodos expuestos por un objeto.(Heredado de MethodBase).

System_CAPS_pubinterfaceSystem_CAPS_privproperty_MethodBase.IsAbstract

Para una descripción de este miembro, vea _MethodBase.IsAbstract.(Heredado de MethodBase).

System_CAPS_pubinterfaceSystem_CAPS_privproperty_MethodBase.IsAssembly

Para una descripción de este miembro, vea _MethodBase.IsAssembly.(Heredado de MethodBase).

System_CAPS_pubinterfaceSystem_CAPS_privproperty_MethodBase.IsConstructor

Para una descripción de este miembro, vea _MethodBase.IsConstructor.(Heredado de MethodBase).

System_CAPS_pubinterfaceSystem_CAPS_privproperty_MethodBase.IsFamily

Para una descripción de este miembro, vea _MethodBase.IsFamily.(Heredado de MethodBase).

System_CAPS_pubinterfaceSystem_CAPS_privproperty_MethodBase.IsFamilyAndAssembly

Para una descripción de este miembro, vea _MethodBase.IsFamilyAndAssembly.(Heredado de MethodBase).

System_CAPS_pubinterfaceSystem_CAPS_privproperty_MethodBase.IsFamilyOrAssembly

Para una descripción de este miembro, vea _MethodBase.IsFamilyOrAssembly.(Heredado de MethodBase).

System_CAPS_pubinterfaceSystem_CAPS_privproperty_MethodBase.IsFinal

Para una descripción de este miembro, vea _MethodBase.IsFinal.(Heredado de MethodBase).

System_CAPS_pubinterfaceSystem_CAPS_privproperty_MethodBase.IsHideBySig

Para una descripción de este miembro, vea _MethodBase.IsHideBySig.(Heredado de MethodBase).

System_CAPS_pubinterfaceSystem_CAPS_privproperty_MethodBase.IsPrivate

Para una descripción de este miembro, vea _MethodBase.IsPrivate.(Heredado de MethodBase).

System_CAPS_pubinterfaceSystem_CAPS_privproperty_MethodBase.IsPublic

Para una descripción de este miembro, vea _MethodBase.IsPublic.(Heredado de MethodBase).

System_CAPS_pubinterfaceSystem_CAPS_privproperty_MethodBase.IsSpecialName

Para una descripción de este miembro, vea _MethodBase.IsSpecialName.(Heredado de MethodBase).

System_CAPS_pubinterfaceSystem_CAPS_privproperty_MethodBase.IsStatic

Para una descripción de este miembro, vea _MethodBase.IsStatic.(Heredado de MethodBase).

System_CAPS_pubinterfaceSystem_CAPS_privproperty_MethodBase.IsVirtual

Para una descripción de este miembro, vea _MethodBase.IsVirtual.(Heredado de MethodBase).

NombreDescripción
System_CAPS_pubmethodGetCustomAttribute(Type)

Sobrecargado. Recupera un atributo personalizado de un tipo especificado que se aplica a un miembro especificado.(Definido por CustomAttributeExtensions).

System_CAPS_pubmethodGetCustomAttribute(Type, Boolean)

Sobrecargado. Recupera un atributo personalizado de un tipo especificado que se aplica a un miembro especificado y, opcionalmente, inspecciona a los antecesores del miembro.(Definido por CustomAttributeExtensions).

System_CAPS_pubmethodGetCustomAttribute<T>()

Sobrecargado. Recupera un atributo personalizado de un tipo especificado que se aplica a un miembro especificado.(Definido por CustomAttributeExtensions).

System_CAPS_pubmethodGetCustomAttribute<T>(Boolean)

Sobrecargado. Recupera un atributo personalizado de un tipo especificado que se aplica a un miembro especificado y, opcionalmente, inspecciona a los antecesores del miembro.(Definido por CustomAttributeExtensions).

System_CAPS_pubmethodGetCustomAttributes()

Sobrecargado. Recupera una colección de atributos personalizados que se aplican a un miembro especificado.(Definido por CustomAttributeExtensions).

System_CAPS_pubmethodGetCustomAttributes(Type)

Sobrecargado. Recupera una colección de atributos personalizados de un tipo especificado que se aplican a un miembro especificado.(Definido por CustomAttributeExtensions).

System_CAPS_pubmethodGetCustomAttributes<T>(Boolean)

Sobrecargado. Recupera una colección de atributos personalizados de un tipo especificado que se aplican a un miembro especificado y, opcionalmente, inspecciona a los antecesores del miembro.(Definido por CustomAttributeExtensions).

System_CAPS_pubmethodIsDefined(Type)

Sobrecargado. Indica si se aplican atributos personalizados de un tipo especificado a un miembro especificado.(Definido por CustomAttributeExtensions).

ConstructorBuilder is used to fully describe a constructor in Microsoft intermediate language (MSIL), including the name, attributes, signature, and constructor body. It is used in conjunction with the TypeBuilder class to create classes at run time. Call DefineConstructor to get an instance of ConstructorBuilder.

If you do not define a constructor for your dynamic type, a default constructor is provided automatically, and it calls the default constructor of the base class.

If you use T:System.Reflection.Emit.ConstructorBuilder to define a constructor for your dynamic type, a default constructor is not provided. You have the following options for providing a default constructor in addition to the constructor you defined:

  • If you want a default constructor that simply calls the default constructor of the base class, you can use the M:System.Reflection.Emit.TypeBuilder.DefineDefaultConstructor(System.Reflection.MethodAttributes) method to create one (and optionally restrict access to it). Do not provide an implementation for this default constructor. If you do, an exception is thrown when you try to use the constructor. No exception is thrown when the M:System.Reflection.Emit.TypeBuilder.CreateType method is called.

  • If you want a default constructor that does something more than simply calling the default constructor of the base class, or that calls another constructor of the base class, or that does something else entirely, you must use the M:System.Reflection.Emit.TypeBuilder.DefineConstructor(System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type[]) method to create a T:System.Reflection.Emit.ConstructorBuilder, and provide your own implementation.

The following code sample illustrates the contextual usage of a ConstructorBuilder.


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

class TestCtorBuilder {

  	public static Type DynamicPointTypeGen() {

	   Type pointType = null;
	   Type[] ctorParams = new Type[] {typeof(int),
					    typeof(int),
					    typeof(int)};

	   AppDomain myDomain = Thread.GetDomain();
	   AssemblyName myAsmName = new AssemblyName();
	   myAsmName.Name = "MyDynamicAssembly";

	   AssemblyBuilder myAsmBuilder = myDomain.DefineDynamicAssembly(
					  myAsmName, 
					  AssemblyBuilderAccess.RunAndSave);

   	   ModuleBuilder pointModule = myAsmBuilder.DefineDynamicModule("PointModule",
									"Point.dll");

	   TypeBuilder pointTypeBld = pointModule.DefineType("Point",
						              TypeAttributes.Public);

	   FieldBuilder xField = pointTypeBld.DefineField("x", typeof(int),
                                                          FieldAttributes.Public);
	   FieldBuilder yField = pointTypeBld.DefineField("y", typeof(int), 
                                                          FieldAttributes.Public);
	   FieldBuilder zField = pointTypeBld.DefineField("z", typeof(int),
                                                          FieldAttributes.Public);


           Type objType = Type.GetType("System.Object"); 
           ConstructorInfo objCtor = objType.GetConstructor(new Type[0]);

	   ConstructorBuilder pointCtor = pointTypeBld.DefineConstructor(
					  MethodAttributes.Public,
					  CallingConventions.Standard,
					  ctorParams);
	   ILGenerator ctorIL = pointCtor.GetILGenerator();

	   // NOTE: ldarg.0 holds the "this" reference - ldarg.1, ldarg.2, and ldarg.3
	   // hold the actual passed parameters. ldarg.0 is used by instance methods
	   // to hold a reference to the current calling object instance. Static methods
	   // do not use arg.0, since they are not instantiated and hence no reference
	   // is needed to distinguish them. 

           ctorIL.Emit(OpCodes.Ldarg_0);

	   // Here, we wish to create an instance of System.Object by invoking its
  	   // constructor, as specified above.

           ctorIL.Emit(OpCodes.Call, objCtor);

	   // Now, we'll load the current instance ref in arg 0, along
	   // with the value of parameter "x" stored in arg 1, into stfld.

           ctorIL.Emit(OpCodes.Ldarg_0);
           ctorIL.Emit(OpCodes.Ldarg_1);
           ctorIL.Emit(OpCodes.Stfld, xField); 

	   // Now, we store arg 2 "y" in the current instance with stfld.

           ctorIL.Emit(OpCodes.Ldarg_0);
           ctorIL.Emit(OpCodes.Ldarg_2);
           ctorIL.Emit(OpCodes.Stfld, yField); 

	   // Last of all, arg 3 "z" gets stored in the current instance.

           ctorIL.Emit(OpCodes.Ldarg_0);
           ctorIL.Emit(OpCodes.Ldarg_3);
           ctorIL.Emit(OpCodes.Stfld, zField); 

           // Our work complete, we return.

	   ctorIL.Emit(OpCodes.Ret); 

	   // Now, let's create three very simple methods so we can see our fields.

	   string[] mthdNames = new string[] {"GetX", "GetY", "GetZ"}; 

           foreach (string mthdName in mthdNames) {
              MethodBuilder getFieldMthd = pointTypeBld.DefineMethod(
				           mthdName, 
				           MethodAttributes.Public,
                                           typeof(int), 
                                           null);
	      ILGenerator mthdIL = getFieldMthd.GetILGenerator();

	      mthdIL.Emit(OpCodes.Ldarg_0);
  	      switch (mthdName) {
	         case "GetX": mthdIL.Emit(OpCodes.Ldfld, xField);
			      break;
	         case "GetY": mthdIL.Emit(OpCodes.Ldfld, yField);
			      break;
	         case "GetZ": mthdIL.Emit(OpCodes.Ldfld, zField);
			      break;

	      }
	      mthdIL.Emit(OpCodes.Ret);

           }
	   // Finally, we create the type.

 	   pointType = pointTypeBld.CreateType();

	   // Let's save it, just for posterity.

	   myAsmBuilder.Save("Point.dll");

	   return pointType;

 	}

	public static void Main() {

	   Type myDynamicType = null;
           object aPoint = null;
	   Type[] aPtypes = new Type[] {typeof(int), typeof(int), typeof(int)};
           object[] aPargs = new object[] {4, 5, 6};

	   // Call the  method to build our dynamic class.

	   myDynamicType = DynamicPointTypeGen();

	   Console.WriteLine("Some information about my new Type '{0}':",
			      myDynamicType.FullName);
	   Console.WriteLine("Assembly: '{0}'", myDynamicType.Assembly);
	   Console.WriteLine("Attributes: '{0}'", myDynamicType.Attributes);
	   Console.WriteLine("Module: '{0}'", myDynamicType.Module);
	   Console.WriteLine("Members: "); 
	   foreach (MemberInfo member in myDynamicType.GetMembers()) {
		Console.WriteLine("-- {0} {1};", member.MemberType, member.Name);
	   }

           Console.WriteLine("---");

	   // Let's take a look at the constructor we created.

	   ConstructorInfo myDTctor = myDynamicType.GetConstructor(aPtypes);
           Console.WriteLine("Constructor: {0};", myDTctor.ToString());

           Console.WriteLine("---");

           // Now, we get to use our dynamically-created class by invoking the constructor. 

	   aPoint = myDTctor.Invoke(aPargs);
           Console.WriteLine("aPoint is type {0}.", aPoint.GetType());


	   // Finally, let's reflect on the instance of our new type - aPoint - and
	   // make sure everything proceeded according to plan.

	   Console.WriteLine("aPoint.x = {0}",
			     myDynamicType.InvokeMember("GetX",
						        BindingFlags.InvokeMethod,
							null,
							aPoint,
							new object[0]));
	   Console.WriteLine("aPoint.y = {0}",
			     myDynamicType.InvokeMember("GetY",
						        BindingFlags.InvokeMethod,
							null,
							aPoint,
							new object[0]));
	   Console.WriteLine("aPoint.z = {0}",
			     myDynamicType.InvokeMember("GetZ",
						        BindingFlags.InvokeMethod,
							null,
							aPoint,
							new object[0]));



	   // +++ OUTPUT +++
	   // Some information about my new Type 'Point':
	   // Assembly: 'MyDynamicAssembly, Version=0.0.0.0'
	   // Attributes: 'AutoLayout, AnsiClass, NotPublic, Public'
	   // Module: 'PointModule'
	   // Members: 
	   // -- Field x;
	   // -- Field y;
	   // -- Field z;
           // -- Method GetHashCode;
           // -- Method Equals;
           // -- Method ToString;
           // -- Method GetType;
           // -- Constructor .ctor;
	   // ---
	   // Constructor: Void .ctor(Int32, Int32, Int32);
	   // ---
	   // aPoint is type Point.
	   // aPoint.x = 4
	   // aPoint.y = 5
	   // aPoint.z = 6

	}

}

.NET Framework
Disponible desde 1.1
Silverlight
Disponible desde 2.0

Cualquier miembro ( Compartido en Visual Basic) estático público de este tipo es seguro para subprocesos. No se garantiza que los miembros de instancia sean seguros para subprocesos.

Volver al principio
Mostrar: