CustomAttributeBuilder Class
Represents a custom attribute in a form that can be attached to a type or member that is being emitted.
Namespace: System.Reflection.Emit
Assembly: mscorlib (in mscorlib.dll)
The CustomAttributeBuilder type exposes the following members.
| Name | Description | |
|---|---|---|
![]() | CustomAttributeBuilder(ConstructorInfo, Object[]) | Initializes a new instance of the CustomAttributeBuilder class given the constructor for the custom attribute and the arguments to the constructor. |
![]() | CustomAttributeBuilder(ConstructorInfo, Object[], FieldInfo[], Object[]) | Initializes a new instance of the CustomAttributeBuilder class, given the constructor for the custom attribute, the arguments to the constructor, and a set of named field/value pairs. |
![]() | CustomAttributeBuilder(ConstructorInfo, Object[], PropertyInfo[], Object[]) | Initializes a new instance of the CustomAttributeBuilder class, given the constructor for the custom attribute, the arguments to the constructor, and a set of named property or value pairs. |
![]() | CustomAttributeBuilder(ConstructorInfo, Object[], PropertyInfo[], Object[], FieldInfo[], Object[]) | Initializes a new instance of the CustomAttributeBuilder class, given the constructor for the custom attribute, the arguments to the constructor, a set of named property or value pairs, and a set of named field or value pairs. |
| Name | Description | |
|---|---|---|
![]() | Equals(Object) | Determines whether the specified Object is equal to the current Object. (Inherited from Object.) |
![]() | Finalize | Allows an object to try to free resources and perform other cleanup operations before the Object is reclaimed by garbage collection. (Inherited from Object.) |
![]() | GetHashCode | Serves as a hash function for a particular type. (Inherited from Object.) |
![]() | GetType | Gets the Type of the current instance. (Inherited from Object.) |
![]() | MemberwiseClone | Creates a shallow copy of the current Object. (Inherited from Object.) |
![]() | ToString | Returns a string that represents the current object. (Inherited from Object.) |
Use the CustomAttributeBuilder object returned by the constructor to attach a custom attribute to a dynamic type or member. Associate the custom attribute with a builder instance by calling the SetCustomAttribute method on that builder instance. For example, create a CustomAttributeBuilder to describe an instance of AssemblyCultureAttribute by supplying the constructor of AssemblyCultureAttribute and its argument. Then call the AssemblyBuilder.SetCustomAttribute method to attach the AssemblyCultureAttribute to a dynamic assembly.
The following code example illustrates the use of CustomAttributeBuilder.
Note: |
|---|
To run this example, see Building Examples That Use a Demo Method and a TextBlock Control. |
using System; using System.Threading; using System.Reflection; using System.Reflection.Emit; // We will apply this custom attribute to our dynamic type. public class ClassCreator : Attribute { private string creator; public string Creator { get { return creator; } } public ClassCreator(string name) { this.creator = name; } } // We will apply this dynamic attribute to our dynamic method. public class DateLastUpdated : Attribute { private string dateUpdated; public string DateUpdated { get { return dateUpdated; } } public DateLastUpdated(string theDate) { this.dateUpdated = theDate; } } class Example { public static Type BuildTypeWithCustomAttributesOnMethod() { AppDomain currentDomain = Thread.GetDomain(); AssemblyName myAsmName = new AssemblyName(); myAsmName.Name = "MyAssembly"; AssemblyBuilder myAsmBuilder = currentDomain.DefineDynamicAssembly( myAsmName, AssemblyBuilderAccess.Run); ModuleBuilder myModBuilder = myAsmBuilder.DefineDynamicModule("MyModule"); // First, we'll build a type with a custom attribute attached. TypeBuilder myTypeBuilder = myModBuilder.DefineType("MyType", TypeAttributes.Public); Type[] ctorParams = new Type[] { typeof(string) }; ConstructorInfo classCtorInfo = typeof(ClassCreator).GetConstructor(ctorParams); CustomAttributeBuilder myCABuilder = new CustomAttributeBuilder( classCtorInfo, new object[] { "Joe Programmer" }); myTypeBuilder.SetCustomAttribute(myCABuilder); // Now, let's build a method and add a custom attribute to it. MethodBuilder myMethodBuilder = myTypeBuilder.DefineMethod("HelloWorld", MethodAttributes.Public, null, new Type[] { }); ctorParams = new Type[] { typeof(string) }; classCtorInfo = typeof(DateLastUpdated).GetConstructor(ctorParams); CustomAttributeBuilder myCABuilder2 = new CustomAttributeBuilder( classCtorInfo, new object[] { DateTime.Now.ToString() }); myMethodBuilder.SetCustomAttribute(myCABuilder2); ILGenerator myIL = myMethodBuilder.GetILGenerator(); myIL.EmitWriteLine("Hello, world!"); myIL.Emit(OpCodes.Ret); return myTypeBuilder.CreateType(); } public static void Demo(System.Windows.Controls.TextBlock outputBlock) { Type myType = BuildTypeWithCustomAttributesOnMethod(); object myInstance = Activator.CreateInstance(myType); object[] customAttrs = myType.GetCustomAttributes(true); outputBlock.Text += "Custom Attributes for Type 'MyType':" + "\n"; object attrVal = null; foreach (object customAttr in customAttrs) { attrVal = typeof(ClassCreator).InvokeMember("Creator", BindingFlags.GetProperty, null, customAttr, new object[] { }); outputBlock.Text += String.Format("-- Attribute: [{0} = \"{1}\"]", customAttr, attrVal) + "\n"; } outputBlock.Text += "Custom Attributes for Method 'HelloWorld()' in 'MyType':" + "\n"; customAttrs = myType.GetMember("HelloWorld")[0].GetCustomAttributes(true); foreach (object customAttr in customAttrs) { attrVal = typeof(DateLastUpdated).InvokeMember("DateUpdated", BindingFlags.GetProperty, null, customAttr, new object[] { }); outputBlock.Text += String.Format("-- Attribute: [{0} = \"{1}\"]", customAttr, attrVal) + "\n"; } outputBlock.Text += "---" + "\n"; outputBlock.Text += myType.InvokeMember("HelloWorld", BindingFlags.InvokeMethod, null, myInstance, new object[] { }) + "\n"; } }
For a list of the operating systems and browsers that are supported by Silverlight, see Supported Operating Systems and Browsers.


Note: