PropertyBuilder Class (System.Reflection.Emit) (original) (raw)
- Reference
Definition
Defines the properties for a type.
public ref class PropertyBuilder abstract : System::Reflection::PropertyInfo
public ref class PropertyBuilder sealed : System::Reflection::PropertyInfo
public ref class PropertyBuilder sealed : System::Reflection::PropertyInfo, System::Runtime::InteropServices::_PropertyBuilder
public abstract class PropertyBuilder : System.Reflection.PropertyInfo
public sealed class PropertyBuilder : System.Reflection.PropertyInfo
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)]
public sealed class PropertyBuilder : System.Reflection.PropertyInfo, System.Runtime.InteropServices._PropertyBuilder
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class PropertyBuilder : System.Reflection.PropertyInfo, System.Runtime.InteropServices._PropertyBuilder
type PropertyBuilder = class
inherit PropertyInfo
[<System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)>]
type PropertyBuilder = class
inherit PropertyInfo
interface _PropertyBuilder
[<System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type PropertyBuilder = class
inherit PropertyInfo
interface _PropertyBuilder
Public MustInherit Class PropertyBuilder
Inherits PropertyInfo
Public NotInheritable Class PropertyBuilder
Inherits PropertyInfo
Public NotInheritable Class PropertyBuilder
Inherits PropertyInfo
Implements _PropertyBuilder
Inheritance
Attributes
Implements
Examples
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' created!
// ---
// The customerName field of instance custData has been set to 'Joe User'.
// -------------------
Imports System.Threading
Imports System.Reflection
Imports System.Reflection.Emit
Class PropertyBuilderDemo
Public Shared Function BuildDynamicTypeWithProperties() As Type
Dim myDomain As AppDomain = Thread.GetDomain()
Dim myAsmName As New AssemblyName()
myAsmName.Name = "MyDynamicAssembly"
' To generate a persistable assembly, specify AssemblyBuilderAccess.RunAndSave.
Dim myAsmBuilder As AssemblyBuilder = myDomain.DefineDynamicAssembly(myAsmName, _
AssemblyBuilderAccess.RunAndSave)
' Generate a persistable, single-module assembly.
Dim myModBuilder As ModuleBuilder = _
myAsmBuilder.DefineDynamicModule(myAsmName.Name, myAsmName.Name & ".dll")
Dim myTypeBuilder As TypeBuilder = myModBuilder.DefineType("CustomerData", TypeAttributes.Public)
' Define a private field to hold the property value.
Dim customerNameBldr As FieldBuilder = myTypeBuilder.DefineField("customerName", _
GetType(String), FieldAttributes.Private)
' The last argument of DefineProperty is Nothing, because the
' property has no parameters. (If you don't specify Nothing, you must
' specify an array of Type objects. For a parameterless property,
' use an array with no elements: New Type() {})
Dim custNamePropBldr As PropertyBuilder = _
myTypeBuilder.DefineProperty("CustomerName", _
PropertyAttributes.HasDefault, _
GetType(String), _
Nothing)
' The property set and property get methods require a special
' set of attributes.
Dim getSetAttr As MethodAttributes = _
MethodAttributes.Public Or MethodAttributes.SpecialName _
Or MethodAttributes.HideBySig
' Define the "get" accessor method for CustomerName.
Dim custNameGetPropMthdBldr As MethodBuilder = _
myTypeBuilder.DefineMethod("GetCustomerName", _
getSetAttr, _
GetType(String), _
Type.EmptyTypes)
Dim custNameGetIL As ILGenerator = custNameGetPropMthdBldr.GetILGenerator()
custNameGetIL.Emit(OpCodes.Ldarg_0)
custNameGetIL.Emit(OpCodes.Ldfld, customerNameBldr)
custNameGetIL.Emit(OpCodes.Ret)
' Define the "set" accessor method for CustomerName.
Dim custNameSetPropMthdBldr As MethodBuilder = _
myTypeBuilder.DefineMethod("get_CustomerName", _
getSetAttr, _
Nothing, _
New Type() {GetType(String)})
Dim custNameSetIL As ILGenerator = 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)
Dim retval As Type = 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
End Function 'BuildDynamicTypeWithProperties
Public Shared Sub Main()
Dim custDataType As Type = BuildDynamicTypeWithProperties()
Dim custDataPropInfo As PropertyInfo() = custDataType.GetProperties()
Dim pInfo As PropertyInfo
For Each pInfo In custDataPropInfo
Console.WriteLine("Property '{0}' created!", pInfo.ToString())
Next pInfo
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.
Dim custData As Object = Activator.CreateInstance(custDataType)
custDataType.InvokeMember("CustomerName", BindingFlags.SetProperty, Nothing, _
custData, New Object() {"Joe User"})
Console.WriteLine("The customerName field of instance custData has been set to '{0}'.", _
custDataType.InvokeMember("CustomerName", BindingFlags.GetProperty, _
Nothing, custData, New Object() {}))
End Sub
End Class
' --- O U T P U T ---
' The output should be as follows:
' -------------------
' Property 'System.String CustomerName' created!
' ---
' The customerName field of instance custData has been set to 'Joe User'.
' -------------------
A PropertyBuilder
is always associated with a TypeBuilder
. The TypeBuilder
. DefineProperty
method will return a new PropertyBuilder
to a client.
Constructors
Properties
Attributes | Gets the attributes for this property. |
---|---|
CanRead | Gets a value indicating whether the property can be read. |
CanWrite | Gets a value indicating whether the property can be written to. |
CustomAttributes | Gets a collection that contains this member's custom attributes. (Inherited from MemberInfo) |
DeclaringType | Gets the class that declares this member. |
GetMethod | Gets the get accessor for this property. (Inherited from PropertyInfo) |
IsCollectible | Gets a value that indicates whether this MemberInfo object is part of an assembly held in a collectible AssemblyLoadContext. (Inherited from MemberInfo) |
IsSpecialName | Gets a value indicating whether the property is the special name. (Inherited from PropertyInfo) |
MemberType | Gets a MemberTypes value indicating that this member is a property. (Inherited from PropertyInfo) |
MetadataToken | Gets a value that identifies a metadata element. (Inherited from MemberInfo) |
Module | Gets the module in which the type that declares the current property is being defined. |
Module | Gets the module in which the type that declares the member represented by the current MemberInfo is defined. (Inherited from MemberInfo) |
Name | Gets the name of this member. |
PropertyToken | Retrieves the token for this property. |
PropertyType | Gets the type of the field of this property. |
ReflectedType | Gets the class object that was used to obtain this instance of MemberInfo. |
SetMethod | Gets the set accessor for this property. (Inherited from PropertyInfo) |
Methods
AddOtherMethod(MethodBuilder) | Adds one of the other methods associated with this property. |
---|---|
AddOtherMethodCore(MethodBuilder) | When overridden in a derived class, adds one of the other methods associated with this property. |
Equals(Object) | Returns a value that indicates whether this instance is equal to a specified object. (Inherited from PropertyInfo) |
GetAccessors() | Returns an array whose elements reflect the public get and set accessors of the property reflected by the current instance. (Inherited from PropertyInfo) |
GetAccessors(Boolean) | Returns an array of the public and non-public get and set accessors on this property. |
GetAccessors(Boolean) | Returns an array whose elements reflect the public and, if specified, non-public get and set accessors of the property reflected by the current instance. (Inherited from PropertyInfo) |
GetConstantValue() | Returns a literal value associated with the property by a compiler. (Inherited from PropertyInfo) |
GetCustomAttributes(Boolean) | Returns an array of all the custom attributes for this property. |
GetCustomAttributes(Type, Boolean) | Returns an array of custom attributes identified by Type. |
GetCustomAttributesData() | Returns a list of CustomAttributeData objects representing data about the attributes that have been applied to the target member. (Inherited from MemberInfo) |
GetGetMethod() | Returns the public get accessor for this property. (Inherited from PropertyInfo) |
GetGetMethod(Boolean) | Returns the public and non-public get accessor for this property. |
GetGetMethod(Boolean) | When overridden in a derived class, returns the public or non-public get accessor for this property. (Inherited from PropertyInfo) |
GetHashCode() | Returns the hash code for this instance. (Inherited from PropertyInfo) |
GetIndexParameters() | Returns an array of all the index parameters for the property. |
GetModifiedPropertyType() | Gets the modified type of this property object. (Inherited from PropertyInfo) |
GetOptionalCustomModifiers() | Returns an array of types representing the optional custom modifiers of the property. (Inherited from PropertyInfo) |
GetRawConstantValue() | Returns a literal value associated with the property by a compiler. (Inherited from PropertyInfo) |
GetRequiredCustomModifiers() | Returns an array of types representing the required custom modifiers of the property. (Inherited from PropertyInfo) |
GetSetMethod() | Returns the public set accessor for this property. (Inherited from PropertyInfo) |
GetSetMethod(Boolean) | Returns the set accessor for this property. |
GetSetMethod(Boolean) | When overridden in a derived class, returns the set accessor for this property. (Inherited from PropertyInfo) |
GetType() | Discovers the attributes of a property and provides access to property metadata. (Inherited from PropertyInfo) |
GetValue(Object, BindingFlags, Binder, Object[], CultureInfo) | Gets the value of a property having the specified binding, index, and CultureInfo. |
GetValue(Object, Object[]) | Gets the value of the indexed property by calling the property's getter method. |
GetValue(Object) | Returns the property value of a specified object. (Inherited from PropertyInfo) |
HasSameMetadataDefinitionAs(MemberInfo) | (Inherited from MemberInfo) |
IsDefined(Type, Boolean) | Indicates whether one or more instance of attributeType is defined on this property. |
MemberwiseClone() | Creates a shallow copy of the current Object. (Inherited from Object) |
SetConstant(Object) | Sets the default value of this property. |
SetConstantCore(Object) | When overridden in a derived class, sets the default value of this property. |
SetCustomAttribute(ConstructorInfo, Byte[]) | Set a custom attribute using a specified custom attribute blob. |
SetCustomAttribute(CustomAttributeBuilder) | Set a custom attribute using a custom attribute builder. |
SetCustomAttributeCore(ConstructorInfo, ReadOnlySpan) | When overridden in a derived class, sets a custom attribute on this assembly. |
SetGetMethod(MethodBuilder) | Sets the method that gets the property value. |
SetGetMethodCore(MethodBuilder) | When overridden in a derived class, sets the method that gets the property value. |
SetSetMethod(MethodBuilder) | Sets the method that sets the property value. |
SetSetMethodCore(MethodBuilder) | When overridden in a derived class, sets the method that sets the property value. |
SetValue(Object, Object, BindingFlags, Binder, Object[], CultureInfo) | Sets the property value for the given object to the given value. |
SetValue(Object, Object, Object[]) | Sets the value of the property with optional index values for index properties. |
SetValue(Object, Object) | Sets the property value of a specified object. (Inherited from PropertyInfo) |
ToString() | Returns a string that represents the current object. (Inherited from Object) |
Explicit Interface Implementations
_MemberInfo.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) | Maps a set of names to a corresponding set of dispatch identifiers. (Inherited from MemberInfo) |
---|---|
_MemberInfo.GetType() | Gets a Type object representing the MemberInfo class. (Inherited from MemberInfo) |
_MemberInfo.GetTypeInfo(UInt32, UInt32, IntPtr) | Retrieves the type information for an object, which can then be used to get the type information for an interface. (Inherited from MemberInfo) |
_MemberInfo.GetTypeInfoCount(UInt32) | Retrieves the number of type information interfaces that an object provides (either 0 or 1). (Inherited from MemberInfo) |
_MemberInfo.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) | Provides access to properties and methods exposed by an object. (Inherited from MemberInfo) |
_PropertyBuilder.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) | Maps a set of names to a corresponding set of dispatch identifiers. |
_PropertyBuilder.GetTypeInfo(UInt32, UInt32, IntPtr) | Retrieves the type information for an object, which can then be used to get the type information for an interface. |
_PropertyBuilder.GetTypeInfoCount(UInt32) | Retrieves the number of type information interfaces that an object provides (either 0 or 1). |
_PropertyBuilder.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) | Provides access to properties and methods exposed by an object. |
_PropertyInfo.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) | Maps a set of names to a corresponding set of dispatch identifiers. (Inherited from PropertyInfo) |
_PropertyInfo.GetType() | Gets a Type object representing the PropertyInfo type. (Inherited from PropertyInfo) |
_PropertyInfo.GetTypeInfo(UInt32, UInt32, IntPtr) | Retrieves the type information for an object, which can then be used to get the type information for an interface. (Inherited from PropertyInfo) |
_PropertyInfo.GetTypeInfoCount(UInt32) | Retrieves the number of type information interfaces that an object provides (either 0 or 1). (Inherited from PropertyInfo) |
_PropertyInfo.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) | Provides access to properties and methods exposed by an object. (Inherited from PropertyInfo) |
ICustomAttributeProvider.GetCustomAttributes(Boolean) | Returns an array of all of the custom attributes defined on this member, excluding named attributes, or an empty array if there are no custom attributes. (Inherited from MemberInfo) |
ICustomAttributeProvider.GetCustomAttributes(Type, Boolean) | Returns an array of custom attributes defined on this member, identified by type, or an empty array if there are no custom attributes of that type. (Inherited from MemberInfo) |
ICustomAttributeProvider.IsDefined(Type, Boolean) | Indicates whether one or more instance of attributeType is defined on this member. (Inherited from MemberInfo) |
Extension Methods
GetCustomAttribute(MemberInfo, Type, Boolean) | Retrieves a custom attribute of a specified type that is applied to a specified member, and optionally inspects the ancestors of that member. |
---|---|
GetCustomAttribute(MemberInfo, Type) | Retrieves a custom attribute of a specified type that is applied to a specified member. |
GetCustomAttribute(MemberInfo, Boolean) | Retrieves a custom attribute of a specified type that is applied to a specified member, and optionally inspects the ancestors of that member. |
GetCustomAttribute(MemberInfo) | Retrieves a custom attribute of a specified type that is applied to a specified member. |
GetCustomAttributes(MemberInfo, Boolean) | Retrieves a collection of custom attributes that are applied to a specified member, and optionally inspects the ancestors of that member. |
GetCustomAttributes(MemberInfo, Type, Boolean) | Retrieves a collection of custom attributes of a specified type that are applied to a specified member, and optionally inspects the ancestors of that member. |
GetCustomAttributes(MemberInfo, Type) | Retrieves a collection of custom attributes of a specified type that are applied to a specified member. |
GetCustomAttributes(MemberInfo) | Retrieves a collection of custom attributes that are applied to a specified member. |
GetCustomAttributes(MemberInfo, Boolean) | Retrieves a collection of custom attributes of a specified type that are applied to a specified member, and optionally inspects the ancestors of that member. |
GetCustomAttributes(MemberInfo) | Retrieves a collection of custom attributes of a specified type that are applied to a specified member. |
IsDefined(MemberInfo, Type, Boolean) | Indicates whether custom attributes of a specified type are applied to a specified member, and, optionally, applied to its ancestors. |
IsDefined(MemberInfo, Type) | Indicates whether custom attributes of a specified type are applied to a specified member. |
GetMetadataToken(MemberInfo) | Gets a metadata token for the given member, if available. |
HasMetadataToken(MemberInfo) | Returns a value that indicates whether a metadata token is available for the specified member. |
GetAccessors(PropertyInfo, Boolean) | |
GetAccessors(PropertyInfo) | |
GetGetMethod(PropertyInfo, Boolean) | |
GetGetMethod(PropertyInfo) | |
GetSetMethod(PropertyInfo, Boolean) | |
GetSetMethod(PropertyInfo) |