0 out of 2 rated this helpful - Rate this topic

PropertyBuilder Class

Defines the properties for a type.

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

Namespace:  System.Reflection.Emit
Assembly:  mscorlib (in mscorlib.dll)
[ClassInterfaceAttribute(ClassInterfaceType.None)]
[ComVisibleAttribute(true)]
[HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)]
public sealed class PropertyBuilder : PropertyInfo, 
	_PropertyBuilder

The PropertyBuilder type exposes the following members.

  Name Description
Public property Attributes Gets the attributes for this property. (Overrides PropertyInfo.Attributes.)
Public property CanRead Gets a value indicating whether the property can be read. (Overrides PropertyInfo.CanRead.)
Public property CanWrite Gets a value indicating whether the property can be written to. (Overrides PropertyInfo.CanWrite.)
Public property DeclaringType Gets the class that declares this member. (Overrides MemberInfo.DeclaringType.)
Public property IsSpecialName Gets a value indicating whether the property is the special name. (Inherited from PropertyInfo.)
Public property MemberType Gets a MemberTypes value indicating that this member is a property. (Inherited from PropertyInfo.)
Public property MetadataToken Gets a value that identifies a metadata element. (Inherited from MemberInfo.)
Public property Module Gets the module in which the type that declares the current property is being defined. (Overrides MemberInfo.Module.)
Public property Name Gets the name of this member. (Overrides MemberInfo.Name.)
Public property PropertyToken Retrieves the token for this property.
Public property PropertyType Gets the type of the field of this property. (Overrides PropertyInfo.PropertyType.)
Public property ReflectedType Gets the class object that was used to obtain this instance of MemberInfo. (Overrides MemberInfo.ReflectedType.)
Top
  Name Description
Public method AddOtherMethod Adds one of the other methods associated with this property.
Public method Equals Returns a value that indicates whether this instance is equal to a specified object. (Inherited from PropertyInfo.)
Protected method Finalize Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection. (Inherited from Object.)
Public method GetAccessors() Returns an array whose elements reflect the public get, set, and other accessors of the property reflected by the current instance. (Inherited from PropertyInfo.)
Public method GetAccessors(Boolean) Returns an array of the public and non-public get and set accessors on this property. (Overrides PropertyInfo.GetAccessors(Boolean).)
Public method GetConstantValue Returns a literal value associated with the property by a compiler. (Inherited from PropertyInfo.)
Public method GetCustomAttributes(Boolean) Returns an array of all the custom attributes for this property. (Overrides MemberInfo.GetCustomAttributes(Boolean).)
Public method GetCustomAttributes(Type, Boolean) Returns an array of custom attributes identified by Type. (Overrides MemberInfo.GetCustomAttributes(Type, Boolean).)
Public method GetCustomAttributesData Returns a list of CustomAttributeData objects representing data about the attributes that have been applied to the target member. (Inherited from MemberInfo.)
Public method GetGetMethod() Returns the public get accessor for this property. (Inherited from PropertyInfo.)
Public method GetGetMethod(Boolean) Returns the public and non-public get accessor for this property. (Overrides PropertyInfo.GetGetMethod(Boolean).)
Public method GetHashCode Returns the hash code for this instance. (Inherited from PropertyInfo.)
Public method GetIndexParameters Returns an array of all the index parameters for the property. (Overrides PropertyInfo.GetIndexParameters().)
Public method GetOptionalCustomModifiers Returns an array of types representing the optional custom modifiers of the property. (Inherited from PropertyInfo.)
Public method GetRawConstantValue Returns a literal value associated with the property by a compiler. (Inherited from PropertyInfo.)
Public method GetRequiredCustomModifiers Returns an array of types representing the required custom modifiers of the property. (Inherited from PropertyInfo.)
Public method GetSetMethod() Returns the public set accessor for this property. (Inherited from PropertyInfo.)
Public method GetSetMethod(Boolean) Returns the set accessor for this property. (Overrides PropertyInfo.GetSetMethod(Boolean).)
Public method GetType Gets the Type of the current instance. (Inherited from Object.)
Public method GetValue(Object, Object[]) Gets the value of the indexed property by calling the property's getter method. (Overrides PropertyInfo.GetValue(Object, Object[]).)
Public method GetValue(Object, BindingFlags, Binder, Object[], CultureInfo) Gets the value of a property having the specified binding, index, and CultureInfo. (Overrides PropertyInfo.GetValue(Object, BindingFlags, Binder, Object[], CultureInfo).)
Public method IsDefined Indicates whether one or more instance of attributeType is defined on this property. (Overrides MemberInfo.IsDefined(Type, Boolean).)
Protected method MemberwiseClone Creates a shallow copy of the current Object. (Inherited from Object.)
Public method SetConstant Sets the default value of this property.
Public method SetCustomAttribute(CustomAttributeBuilder) Set a custom attribute using a custom attribute builder.
Public method SetCustomAttribute(ConstructorInfo, Byte[]) Set a custom attribute using a specified custom attribute blob.
Public method SetGetMethod Sets the method that gets the property value.
Public method SetSetMethod Sets the method that sets the property value.
Public method SetValue(Object, Object, Object[]) Sets the value of the property with optional index values for index properties. (Overrides PropertyInfo.SetValue(Object, Object, Object[]).)
Public method SetValue(Object, Object, BindingFlags, Binder, Object[], CultureInfo) Sets the property value for the given object to the given value. (Overrides PropertyInfo.SetValue(Object, Object, BindingFlags, Binder, Object[], CultureInfo).)
Public method ToString Returns a string that represents the current object. (Inherited from Object.)
Top
  Name Description
Explicit interface implemetation Private method _MemberInfo.GetIDsOfNames Maps a set of names to a corresponding set of dispatch identifiers. (Inherited from MemberInfo.)
Explicit interface implemetation Private method _MemberInfo.GetType Gets a Type object representing the MemberInfo class. (Inherited from MemberInfo.)
Explicit interface implemetation Private method _MemberInfo.GetTypeInfo Retrieves the type information for an object, which can then be used to get the type information for an interface. (Inherited from MemberInfo.)
Explicit interface implemetation Private method _MemberInfo.GetTypeInfoCount Retrieves the number of type information interfaces that an object provides (either 0 or 1). (Inherited from MemberInfo.)
Explicit interface implemetation Private method _MemberInfo.Invoke Provides access to properties and methods exposed by an object. (Inherited from MemberInfo.)
Explicit interface implemetation Private method _PropertyBuilder.GetIDsOfNames Maps a set of names to a corresponding set of dispatch identifiers.
Explicit interface implemetation Private method _PropertyBuilder.GetTypeInfo Retrieves the type information for an object, which can then be used to get the type information for an interface.
Explicit interface implemetation Private method _PropertyBuilder.GetTypeInfoCount Retrieves the number of type information interfaces that an object provides (either 0 or 1).
Explicit interface implemetation Private method _PropertyBuilder.Invoke Provides access to properties and methods exposed by an object.
Explicit interface implemetation Private method _PropertyInfo.GetIDsOfNames Maps a set of names to a corresponding set of dispatch identifiers. (Inherited from PropertyInfo.)
Explicit interface implemetation Private method _PropertyInfo.GetType Gets a Type object representing the PropertyInfo type. (Inherited from PropertyInfo.)
Explicit interface implemetation Private method _PropertyInfo.GetTypeInfo Retrieves the type information for an object, which can then be used to get the type information for an interface. (Inherited from PropertyInfo.)
Explicit interface implemetation Private method _PropertyInfo.GetTypeInfoCount Retrieves the number of type information interfaces that an object provides (either 0 or 1). (Inherited from PropertyInfo.)
Explicit interface implemetation Private method _PropertyInfo.Invoke Provides access to properties and methods exposed by an object. (Inherited from PropertyInfo.)
Top

A PropertyBuilder is always associated with a TypeBuilder. The TypeBuilder. DefineProperty method will return a new PropertyBuilder to a client.

Note Note

The HostProtectionAttribute attribute applied to this type or member has the following Resources property value: MayLeakOnAbort. The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser). For more information, see the HostProtectionAttribute class or SQL Server Programming and Host Protection Attributes.

The following code sample demonstrates how to implement properties in a dynamic type using a PropertyBuilder obtained via TypeBuilder.DefineProperty to create the property framework and an associated MethodBuilder to implement the IL logic within the property.



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

Supported in: 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.
Did you find this helpful?
(1500 characters remaining)
Community Content Add
Annotations FAQ
Only Create a new Property to existing Type
I have a Class Person with 2 properties: Name, Surname$0 At runtime a want to add a property State. $0So i just have my assembly and my module$0 $0 $0how can i get a PropertyBuilder without create a new assembly, without create a new module and without create a new Type????$0 I don't want t create a new type, i just have a type 'Person', only want to add a property 'State' at runtime, is it possible?$0 $0Emax$0