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 MethodBuilder

 

Publicado: octubre de 2016

Define y representa un método (o 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.MethodInfo
        System.Reflection.Emit.MethodBuilder

[ClassInterfaceAttribute(ClassInterfaceType.None)]
[ComVisibleAttribute(true)]
[HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)]
public sealed class MethodBuilder : MethodInfo, _MethodBuilder

NombreDescripción
System_CAPS_pubpropertyAttributes

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

System_CAPS_pubpropertyCallingConvention

Devuelve la convención de llamada del método.(Invalida MethodBase.CallingConvention).

System_CAPS_pubpropertyContainsGenericParameters

No se admite para este tipo.(Invalida MethodBase.ContainsGenericParameters).

System_CAPS_pubpropertyCustomAttributes

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

System_CAPS_pubpropertyDeclaringType

Devuelve el tipo que declara este método.(Invalida MemberInfo.DeclaringType).

System_CAPS_pubpropertyInitLocals

Obtiene o establece un valor booleano que especifica si las variables locales de este método son inicializado en cero. El valor predeterminado de esta propiedad es true.

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.(Invalida MethodBase.IsGenericMethod).

System_CAPS_pubpropertyIsGenericMethodDefinition

Obtiene un valor que indica si el objeto MethodBuilder actual representa la definición de un método genérico.(Invalida MethodBase.IsGenericMethodDefinition).

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

Devuelve NotSupportedException en todos los casos(Invalida MethodBase.IsSecurityCritical).

System_CAPS_pubpropertyIsSecuritySafeCritical

Devuelve NotSupportedException en todos los casos(Invalida MethodBase.IsSecuritySafeCritical).

System_CAPS_pubpropertyIsSecurityTransparent

Devuelve NotSupportedException en todos los casos(Invalida MethodBase.IsSecurityTransparent).

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 método.(Heredado de MethodInfo).

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 en el que se define el método actual.(Invalida MemberInfo.Module).

System_CAPS_pubpropertyName

Recupera el nombre de este método.(Invalida MemberInfo.Name).

System_CAPS_pubpropertyReflectedType

Recupera la clase que se usó en la reflexión para obtener este método.(Invalida MemberInfo.ReflectedType).

System_CAPS_pubpropertyReturnParameter

Obtiene un objeto ParameterInfo que contiene información sobre el tipo de valor devuelto del método como, por ejemplo, cuando el tipo de valor devuelto tiene modificadores personalizados.(Invalida MethodInfo.ReturnParameter).

System_CAPS_pubpropertyReturnType

Obtiene el tipo de valor devuelto del método representando por este MethodBuilder.(Invalida MethodInfo.ReturnType).

System_CAPS_pubpropertyReturnTypeCustomAttributes

Devuelve los atributos personalizados del tipo de valor devuelto del método.(Invalida MethodInfo.ReturnTypeCustomAttributes).

System_CAPS_pubpropertySignature

Recupera la firma del método.

NombreDescripción
System_CAPS_pubmethodAddDeclarativeSecurity(SecurityAction, PermissionSet)

Agrega seguridad declarativa a este método.

System_CAPS_pubmethodCreateDelegate(Type)

Crea un delegado del tipo especificado a partir de este método.(Heredado de MethodInfo).

System_CAPS_pubmethodCreateDelegate(Type, Object)

Crea un delegado del tipo especificado con el destino especificado a partir de este método.(Heredado de MethodInfo).

System_CAPS_pubmethodCreateMethodBody(Byte[], Int32)

Crea el cuerpo del método usando una matriz de bytes suministrada de instrucciones de lenguaje intermedio (MSIL) de Microsoft.

System_CAPS_pubmethodDefineGenericParameters(String[])

Establece los parámetros de tipo genérico para el método actual, especifica sus nombres y devuelve una matriz de objetos GenericTypeParameterBuilder que pueden usarse para establecer sus restricciones.

System_CAPS_pubmethodDefineParameter(Int32, ParameterAttributes, String)

Establece los atributos de parámetro y el nombre de un parámetro de este método, o del valor devuelto de este método. Devuelve un ParameterBuilder, que se puede usar para aplicar atributos personalizados.

System_CAPS_pubmethodEquals(Object)

Determina si el objeto especificado es igual a esta instancia.(Invalida MethodInfo.Equals(Object)).

System_CAPS_pubmethodGetBaseDefinition()

Devuelve la implementación base para un método.(Invalida MethodInfo.GetBaseDefinition()).

System_CAPS_pubmethodGetCustomAttributes(Boolean)

Devuelve todos los atributos personalizados definidos para este método.(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 GenericTypeParameterBuilder que representan los parámetros de tipo del método si es genérico.(Invalida MethodInfo.GetGenericArguments()).

System_CAPS_pubmethodGetGenericMethodDefinition()

Devuelve este método.(Invalida MethodInfo.GetGenericMethodDefinition()).

System_CAPS_pubmethodGetHashCode()

Obtiene el código hash de este método.(Invalida MethodInfo.GetHashCode()).

System_CAPS_pubmethodGetILGenerator()

Devuelve un ILGenerator para este método con el tamaño de secuencia del lenguaje intermedio de Microsoft (MSIL) predeterminado de 64 bytes.

System_CAPS_pubmethodGetILGenerator(Int32)

Devuelve un ILGenerator para este método con el tamaño de secuencia del lenguaje intermedio de Microsoft (MSIL).

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 para el método.(Invalida MethodBase.GetMethodImplementationFlags()).

System_CAPS_pubmethodGetModule()

Devuelve una referencia al módulo que contiene este método.

System_CAPS_pubmethodGetParameters()

Devuelve los parámetros de este método.(Invalida MethodBase.GetParameters()).

System_CAPS_pubmethodGetToken()

Devuelve el MethodToken que representa el token para este método.

System_CAPS_pubmethodGetType()

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

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

Invoca dinámicamente el método reflejado por esta instancia en el objeto dado, pasando los parámetros especificados y considerando las restricciones del enlazador facilitado.(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_pubmethodIsDefined(Type, Boolean)

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

System_CAPS_pubmethodMakeGenericMethod(Type[])

Devuelve un método genérico construido a partir de la definición de método genérico actual mediante los argumentos de tipo genérico especificados.(Invalida MethodInfo.MakeGenericMethod(Type[])).

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 para este método.

System_CAPS_pubmethodSetMarshal(UnmanagedMarshal)

Obsoleto.Establece la información de cálculo de referencias para el tipo de valor devuelto del método.

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

Crea el cuerpo del método usando una matriz de bytes especificada de instrucciones de lenguaje intermedio de Microsoft (MSIL).

System_CAPS_pubmethodSetParameters(Type[])

Establece el número y tipos de parámetros para un método.

System_CAPS_pubmethodSetReturnType(Type)

Establece el tipo devuelto del método.

System_CAPS_pubmethodSetSignature(Type, Type[], Type[], Type[], Type[][], Type[][])

Establece la firma del método, incluidos el tipo de valor devuelto, los tipos de parámetros y los modificadores personalizados necesarios y opcionales de los tipos de parámetros y el tipo de valor devuelto.

System_CAPS_pubmethodSetSymCustomAttribute(String, Byte[])

Establezca un atributo personalizado simbólico mediante un blob.

System_CAPS_pubmethodToString()

Devuelve esta instancia MethodBuilder como cadena.(Invalida Object.ToString()).

NombreDescripción
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_privmethod_MethodBuilder.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_MethodBuilder.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_MethodBuilder.GetTypeInfoCount(UInt32)

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

System_CAPS_pubinterfaceSystem_CAPS_privmethod_MethodBuilder.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_MethodInfo.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

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

System_CAPS_pubinterfaceSystem_CAPS_privmethod_MethodInfo.GetType()

Proporciona acceso al método GetType desde COM.(Heredado de MethodInfo).

System_CAPS_pubinterfaceSystem_CAPS_privmethod_MethodInfo.GetTypeInfo(UInt32, UInt32, IntPtr)

Obtiene la información del tipo de un objeto, que puede utilizarse para obtener la información del tipo de una interfaz. (Heredado de MethodInfo).

System_CAPS_pubinterfaceSystem_CAPS_privmethod_MethodInfo.GetTypeInfoCount(UInt32)

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

(Heredado de MethodInfo).

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

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

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_pubmethodGetRuntimeBaseDefinition()

Recupera un objeto que representa el método especificado en la clase base directa o indirecta se declaró por primera vez en el método.(Definido por RuntimeReflectionExtensions).

System_CAPS_pubmethodIsDefined(Type)

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

The T:System.Reflection.Emit.MethodBuilder class is used to fully describe a method in Microsoft intermediate language (MSIL), including the name, attributes, signature, and method body. It is used in conjunction with the T:System.Reflection.Emit.TypeBuilder class to create classes at runtime.

You can use reflection emit to define global methods and to define methods as type members. The APIs that define methods return T:System.Reflection.Emit.MethodBuilder objects.

A global method is defined by using the M:System.Reflection.Emit.ModuleBuilder.DefineGlobalMethod(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]) method, which returns a MethodBuilder object.

Global methods must be static. If a dynamic module contains global methods, the M:System.Reflection.Emit.ModuleBuilder.CreateGlobalFunctions method must be called before persisting the dynamic module or the containing dynamic assembly because the common language runtime postpones fixing up the dynamic module until all global functions have been defined.

A global native method is defined by using the M:System.Reflection.Emit.ModuleBuilder.DefinePInvokeMethod(System.String,System.String,System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Runtime.InteropServices.CallingConvention,System.Runtime.InteropServices.CharSet) method. Platform invoke (PInvoke) methods must not be declared abstract or virtual. The runtime sets the F:System.Reflection.MethodAttributes.PinvokeImpl attribute for a platform invoke method.

A method is defined as a type member by using the Overload:System.Reflection.Emit.TypeBuilder.DefineMethod method, which returns a T:System.Reflection.Emit.MethodBuilder object.

The M:System.Reflection.Emit.MethodBuilder.DefineParameter(System.Int32,System.Reflection.ParameterAttributes,System.String) method is used to set the name and parameter attributes of a parameter, or of the return value. TheT:System.Reflection.Emit.ParameterBuilder object returned by this method represents a parameter or the return value. The T:System.Reflection.Emit.ParameterBuilder object can be used to set the marshaling, to set the constant value, and to apply custom attributes.

Members of the T:System.Reflection.MethodAttributes enumeration define the precise character of a dynamic method:

  • Static methods are specified using the F:System.Reflection.MethodAttributes.Static attribute.

  • Final methods (methods that cannot be overridden) are specified using the F:System.Reflection.MethodAttributes.Final attribute.

  • Virtual methods are specified using the F:System.Reflection.MethodAttributes.Virtual attribute.

  • Abstract methods are specified using the F:System.Reflection.MethodAttributes.Abstract attribute.

  • Several attributes determine method visibility. See the description of the T:System.Reflection.MethodAttributes enumeration.

  • Methods that implement overloaded operators must set the F:System.Reflection.MethodAttributes.SpecialName attribute.

  • Finalizers must set the F:System.Reflection.MethodAttributes.SpecialName attribute.

  • Although T:System.Reflection.Emit.MethodBuilder is derived from T:System.Reflection.MethodInfo, some of the abstract methods defined in the T:System.Reflection.MethodInfo class are not fully implemented in T:System.Reflection.Emit.MethodBuilder. These T:System.Reflection.Emit.MethodBuilder methods throw the T:System.NotSupportedException. For example the M:System.Reflection.Emit.MethodBuilder.Invoke(System.Object,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo) method is not fully implemented. You can reflect on these methods by retrieving the enclosing type using the M:System.Type.GetType or M:System.Reflection.Assembly.GetType(System.String) methods.

  • Custom modifiers are supported starting with the .NET Framework version 2.0. They are not supported in earlier versions.

The following example uses the T:System.Reflection.Emit.MethodBuilder class to create a method within a dynamic type.


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

class DemoMethodBuilder 
{
    public static void AddMethodDynamically (TypeBuilder myTypeBld,
                                             string mthdName,
                                             Type[] mthdParams, 
                                             Type returnType,
                                             string mthdAction) 
    {

        MethodBuilder myMthdBld = myTypeBld.DefineMethod(
                                             mthdName,
                                             MethodAttributes.Public |
                                             MethodAttributes.Static,
                                             returnType,
                                             mthdParams);        

        ILGenerator ILout = myMthdBld.GetILGenerator();

        int numParams = mthdParams.Length;

        for (byte x=0; x < numParams; x++) 
        {
            ILout.Emit(OpCodes.Ldarg_S, x);
        }

        if (numParams > 1) 
        {
            for (int y=0; y<(numParams-1); y++) 
            {
                switch (mthdAction) 
                {
                    case "A": ILout.Emit(OpCodes.Add);
                              break;
                    case "M": ILout.Emit(OpCodes.Mul);
                              break;
                    default: ILout.Emit(OpCodes.Add);
                              break;
                }
            }
        }
        ILout.Emit(OpCodes.Ret);
    }

    public static void Main()
    {
        AppDomain myDomain = AppDomain.CurrentDomain;
        AssemblyName asmName = new AssemblyName();
        asmName.Name = "MyDynamicAsm";

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

        ModuleBuilder myModule = myAsmBuilder.DefineDynamicModule("MyDynamicAsm",
                                                                  "MyDynamicAsm.dll");

        TypeBuilder myTypeBld = myModule.DefineType("MyDynamicType",
                                                    TypeAttributes.Public);           

        // Get info from the user to build the method dynamically.
        Console.WriteLine("Let's build a simple method dynamically!");
        Console.WriteLine("Please enter a few numbers, separated by spaces.");
        string inputNums = Console.ReadLine();
        Console.Write("Do you want to [A]dd (default) or [M]ultiply these numbers? ");
        string myMthdAction = Console.ReadLine().ToUpper();
        Console.Write("Lastly, what do you want to name your new dynamic method? ");
        string myMthdName = Console.ReadLine();

        // Process inputNums into an array and create a corresponding Type array 
        int index = 0;
        string[] inputNumsList = inputNums.Split();

        Type[] myMthdParams = new Type[inputNumsList.Length];
        object[] inputValsList = new object[inputNumsList.Length];


        foreach (string inputNum in inputNumsList) 
        {
            inputValsList[index] = (object)Convert.ToInt32(inputNum);
                myMthdParams[index] = typeof(int);
                index++;
        } 

        // Now, call the method building method with the parameters, passing the 
        // TypeBuilder by reference.
        AddMethodDynamically(myTypeBld,
                             myMthdName,
                             myMthdParams,
                             typeof(int),        
                             myMthdAction);

        Type myType = myTypeBld.CreateType();

        Console.WriteLine("---");
        Console.WriteLine("The result of {0} the inputted values is: {1}",
                          ((myMthdAction == "M") ? "multiplying" : "adding"),
                          myType.InvokeMember(myMthdName,
                          BindingFlags.InvokeMethod | BindingFlags.Public |
                          BindingFlags.Static,
                          null,
                          null,
                          inputValsList));
        Console.WriteLine("---");

        // Let's take a look at the method we created.
        // If you are interested in seeing the MSIL generated dynamically for the method
        // your program generated, change to the directory where you ran the compiled
        // code sample and type "ildasm MyDynamicAsm.dll" at the prompt. When the list
        // of manifest contents appears, click on "MyDynamicType" and then on the name of
        // of the method you provided during execution.

        myAsmBuilder.Save("MyDynamicAsm.dll");

        MethodInfo myMthdInfo = myType.GetMethod(myMthdName);
        Console.WriteLine("Your Dynamic Method: {0};", myMthdInfo.ToString());    
    }
}

.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: