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 PropertyBuilder

 

Publicado: octubre de 2016

Define las propiedades de un tipo.

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

System.Object
  System.Reflection.MemberInfo
    System.Reflection.PropertyInfo
      System.Reflection.Emit.PropertyBuilder

[ClassInterfaceAttribute(ClassInterfaceType.None)]
[ComVisibleAttribute(true)]
[HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)]
public sealed class PropertyBuilder : PropertyInfo, _PropertyBuilder

NombreDescripción
System_CAPS_pubpropertyAttributes

Obtiene los atributos de esta propiedad.(Invalida PropertyInfo.Attributes).

System_CAPS_pubpropertyCanRead

Obtiene un valor que indica si se puede leer la propiedad.(Invalida PropertyInfo.CanRead).

System_CAPS_pubpropertyCanWrite

Obtiene un valor que indica si se puede escribir en la propiedad.(Invalida PropertyInfo.CanWrite).

System_CAPS_pubpropertyCustomAttributes

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

System_CAPS_pubpropertyDeclaringType

Obtiene la clase que declara a este miembro.(Invalida MemberInfo.DeclaringType).

System_CAPS_pubpropertyGetMethod

Obtiene el descriptor de acceso get de esta propiedad.(Heredado de PropertyInfo).

System_CAPS_pubpropertyIsSpecialName

Obtiene un valor que indica si la propiedad es el nombre especial.(Heredado de PropertyInfo).

System_CAPS_pubpropertyMemberType

Obtiene un valor MemberTypes que indica que este miembro es una propiedad.(Heredado de PropertyInfo).

System_CAPS_pubpropertyMetadataToken

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

System_CAPS_pubpropertyModule

Obtiene el módulo en el que se define el tipo que declara la propiedad actual.(Invalida MemberInfo.Module).

System_CAPS_pubpropertyName

Obtiene el nombre de este miembro.(Invalida MemberInfo.Name).

System_CAPS_pubpropertyPropertyToken

Recupera el símbolo (token) de esta propiedad.

System_CAPS_pubpropertyPropertyType

Obtiene el tipo del campo de esta propiedad.(Invalida PropertyInfo.PropertyType).

System_CAPS_pubpropertyReflectedType

Obtiene el objeto de clase utilizado para obtener esta instancia de MemberInfo.(Invalida MemberInfo.ReflectedType).

System_CAPS_pubpropertySetMethod

Obtiene el descriptor de acceso set de esta propiedad.(Heredado de PropertyInfo).

NombreDescripción
System_CAPS_pubmethodAddOtherMethod(MethodBuilder)

Agrega uno de los otros métodos asociados a esta propiedad.

System_CAPS_pubmethodEquals(Object)

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

System_CAPS_pubmethodGetAccessors()

Devuelve una matriz cuyos elementos reflejan los descriptores de acceso públicos get y set de la propiedad que refleja la instancia actual.(Heredado de PropertyInfo).

System_CAPS_pubmethodGetAccessors(Boolean)

Devuelve una matriz del público y no público get y set descriptores de acceso en esta propiedad.(Invalida PropertyInfo.GetAccessors(Boolean)).

System_CAPS_pubmethodGetConstantValue()

Devuelve un valor literal asociado a la propiedad mediante un compilador.(Heredado de PropertyInfo).

System_CAPS_pubmethodGetCustomAttributes(Boolean)

Devuelve una matriz de todos los atributos personalizados para esta propiedad.(Invalida MemberInfo.GetCustomAttributes(Boolean)).

System_CAPS_pubmethodGetCustomAttributes(Type, Boolean)

Devuelve una matriz de atributos personalizados identificados por Type.(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_pubmethodGetGetMethod()

Devuelve el descriptor de acceso get público de esta propiedad.(Heredado de PropertyInfo).

System_CAPS_pubmethodGetGetMethod(Boolean)

Devuelve el público y no público el descriptor de acceso get de esta propiedad.(Invalida PropertyInfo.GetGetMethod(Boolean)).

System_CAPS_pubmethodGetHashCode()

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

System_CAPS_pubmethodGetIndexParameters()

Devuelve una matriz de todos los parámetros de índice para la propiedad.(Invalida PropertyInfo.GetIndexParameters()).

System_CAPS_pubmethodGetOptionalCustomModifiers()

Devuelve una matriz de tipos que representan los modificadores personalizados opcionales de la propiedad.(Heredado de PropertyInfo).

System_CAPS_pubmethodGetRawConstantValue()

Devuelve un valor literal asociado a la propiedad mediante un compilador.(Heredado de PropertyInfo).

System_CAPS_pubmethodGetRequiredCustomModifiers()

Devuelve una matriz de tipos que representan los modificadores personalizados necesarios de la propiedad.(Heredado de PropertyInfo).

System_CAPS_pubmethodGetSetMethod()

Devuelve el descriptor de acceso set público de esta propiedad.(Heredado de PropertyInfo).

System_CAPS_pubmethodGetSetMethod(Boolean)

Devuelve el descriptor de acceso establecido de esta propiedad.(Invalida PropertyInfo.GetSetMethod(Boolean)).

System_CAPS_pubmethodGetType()

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

System_CAPS_pubmethodGetValue(Object)

Devuelve el valor de propiedad de un objeto especificado.(Heredado de PropertyInfo).

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

Obtiene el valor de una propiedad con el especificado enlace, índice y CultureInfo.(Invalida PropertyInfo.GetValue(Object, BindingFlags, Binder, Object[], CultureInfo)).

System_CAPS_pubmethodGetValue(Object, Object[])

Obtiene el valor de la propiedad indizada llamando al método del captador de la propiedad.(Invalida PropertyInfo.GetValue(Object, Object[])).

System_CAPS_pubmethodIsDefined(Type, Boolean)

Indica si hay una o más instancias de attributeType se define en esta propiedad.(Invalida MemberInfo.IsDefined(Type, Boolean)).

System_CAPS_pubmethodSetConstant(Object)

Establece el valor predeterminado de esta propiedad.

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_pubmethodSetGetMethod(MethodBuilder)

Establece el método que obtiene el valor de propiedad.

System_CAPS_pubmethodSetSetMethod(MethodBuilder)

Establece el método que establece el valor de propiedad.

System_CAPS_pubmethodSetValue(Object, Object)

Establece el valor de propiedad de un objeto especificado.(Heredado de PropertyInfo).

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

Establece el valor de propiedad del objeto especificado en el valor especificado.(Invalida PropertyInfo.SetValue(Object, Object, BindingFlags, Binder, Object[], CultureInfo)).

System_CAPS_pubmethodSetValue(Object, Object, Object[])

Establece el valor de la propiedad con valores de índice opcionales para propiedades del índice.(Invalida PropertyInfo.SetValue(Object, Object, Object[])).

System_CAPS_pubmethodToString()

Devuelve una cadena que representa al objeto actual. (Heredado de Object).

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_PropertyBuilder.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_PropertyBuilder.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_PropertyBuilder.GetTypeInfoCount(UInt32)

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

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

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

System_CAPS_pubinterfaceSystem_CAPS_privmethod_PropertyInfo.GetType()

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

System_CAPS_pubinterfaceSystem_CAPS_privmethod_PropertyInfo.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 PropertyInfo).

System_CAPS_pubinterfaceSystem_CAPS_privmethod_PropertyInfo.GetTypeInfoCount(UInt32)

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

(Heredado de PropertyInfo).

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

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

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

Un PropertyBuilder siempre está asociado a un TypeBuilder. TypeBuilder. DefineProperty Devuelve un nuevo método PropertyBuilder a un cliente.

El ejemplo de código siguiente muestra cómo implementar propiedades en un tipo dinámico mediante una PropertyBuilder obtenido a través de TypeBuilder.DefineProperty para crear el marco de propiedad y un asociado MethodBuilder para implementar la lógica de IL dentro de la propiedad.


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

class PropertyBuilderDemo

{

   public static Type BuildDynamicTypeWithProperties() 
   {
        AppDomain myDomain = Thread.GetDomain();
        AssemblyName myAsmName = new AssemblyName();
        myAsmName.Name = "MyDynamicAssembly";

        // To generate a persistable assembly, specify AssemblyBuilderAccess.RunAndSave.
        AssemblyBuilder myAsmBuilder = myDomain.DefineDynamicAssembly(myAsmName,
                                                        AssemblyBuilderAccess.RunAndSave);
        // Generate a persistable single-module assembly.
        ModuleBuilder myModBuilder = 
            myAsmBuilder.DefineDynamicModule(myAsmName.Name, myAsmName.Name + ".dll");

        TypeBuilder myTypeBuilder = myModBuilder.DefineType("CustomerData", 
                                                        TypeAttributes.Public);

        FieldBuilder customerNameBldr = myTypeBuilder.DefineField("customerName",
                                                        typeof(string),
                                                        FieldAttributes.Private);

        // The last argument of DefineProperty is null, because the
        // property has no parameters. (If you don't specify null, you must
        // specify an array of Type objects. For a parameterless property,
        // use an array with no elements: new Type[] {})
        PropertyBuilder custNamePropBldr = myTypeBuilder.DefineProperty("CustomerName",
                                                         PropertyAttributes.HasDefault,
                                                         typeof(string),
                                                         null);

        // The property set and property get methods require a special
        // set of attributes.
        MethodAttributes getSetAttr = 
            MethodAttributes.Public | MethodAttributes.SpecialName |
                MethodAttributes.HideBySig;

        // Define the "get" accessor method for CustomerName.
        MethodBuilder custNameGetPropMthdBldr = 
            myTypeBuilder.DefineMethod("get_CustomerName",
                                       getSetAttr,        
                                       typeof(string),
                                       Type.EmptyTypes);

        ILGenerator custNameGetIL = custNameGetPropMthdBldr.GetILGenerator();

        custNameGetIL.Emit(OpCodes.Ldarg_0);
        custNameGetIL.Emit(OpCodes.Ldfld, customerNameBldr);
        custNameGetIL.Emit(OpCodes.Ret);

        // Define the "set" accessor method for CustomerName.
        MethodBuilder custNameSetPropMthdBldr = 
            myTypeBuilder.DefineMethod("set_CustomerName",
                                       getSetAttr,     
                                       null,
                                       new Type[] { typeof(string) });

        ILGenerator custNameSetIL = custNameSetPropMthdBldr.GetILGenerator();

        custNameSetIL.Emit(OpCodes.Ldarg_0);
        custNameSetIL.Emit(OpCodes.Ldarg_1);
        custNameSetIL.Emit(OpCodes.Stfld, customerNameBldr);
        custNameSetIL.Emit(OpCodes.Ret);

        // Last, we must map the two methods created above to our PropertyBuilder to 
        // their corresponding behaviors, "get" and "set" respectively. 
        custNamePropBldr.SetGetMethod(custNameGetPropMthdBldr);
        custNamePropBldr.SetSetMethod(custNameSetPropMthdBldr);


        Type retval = myTypeBuilder.CreateType();

        // Save the assembly so it can be examined with Ildasm.exe,
        // or referenced by a test program.
        myAsmBuilder.Save(myAsmName.Name + ".dll");
        return retval;
   }

   public static void Main() 
   {
        Type custDataType = BuildDynamicTypeWithProperties();

        PropertyInfo[] custDataPropInfo = custDataType.GetProperties();
        foreach (PropertyInfo pInfo in custDataPropInfo) {
           Console.WriteLine("Property '{0}' created!", pInfo.ToString());
        }

        Console.WriteLine("---");
        // Note that when invoking a property, you need to use the proper BindingFlags -
        // BindingFlags.SetProperty when you invoke the "set" behavior, and 
        // BindingFlags.GetProperty when you invoke the "get" behavior. Also note that
        // we invoke them based on the name we gave the property, as expected, and not
        // the name of the methods we bound to the specific property behaviors.

        object custData = Activator.CreateInstance(custDataType);
        custDataType.InvokeMember("CustomerName", BindingFlags.SetProperty,
                                      null, custData, new object[]{ "Joe User" });

        Console.WriteLine("The customerName field of instance custData has been set to '{0}'.",
                           custDataType.InvokeMember("CustomerName", BindingFlags.GetProperty,
                                                      null, custData, new object[]{ }));
   }

}

// --- O U T P U T ---
// The output should be as follows:
// -------------------
// Property 'System.String CustomerName [System.String]' created!
// ---
// The customerName field of instance custData has been set to 'Joe User'.
// -------------------

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