CustomAttributeBuilder Class
Helps build custom attributes.
Namespace: System.Reflection.Emit
Assembly: mscorlib (in mscorlib.dll)
The CustomAttributeBuilder type exposes the following members.
| Name | Description | |
|---|---|---|
![]() | CustomAttributeBuilder(ConstructorInfo, Object[]) | Initializes an instance of the CustomAttributeBuilder class given the constructor for the custom attribute and the arguments to the constructor. |
![]() | CustomAttributeBuilder(ConstructorInfo, Object[], FieldInfo[], Object[]) | Initializes an 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 an 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 an 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 it 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.) |
| Name | Description | |
|---|---|---|
![]() ![]() | _CustomAttributeBuilder.GetIDsOfNames | Maps a set of names to a corresponding set of dispatch identifiers. |
![]() ![]() | _CustomAttributeBuilder.GetTypeInfo | Retrieves the type information for an object, which can then be used to get the type information for an interface. |
![]() ![]() | _CustomAttributeBuilder.GetTypeInfoCount | Retrieves the number of type information interfaces that an object provides (either 0 or 1). |
![]() ![]() | _CustomAttributeBuilder.Invoke | Provides access to properties and methods exposed by an object. |
Use the CustomAttributeBuilder object returned by the constructor to describe the custom attribute. Associate the CustomAttribute 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 SetCustomAttribute on an AssemblyBuilder to establish the association.
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 illustrates the use of CustomAttributeBuilder.
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 MethodBuilderCustomAttributesDemo { 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 Main() { Type myType = BuildTypeWithCustomAttributesOnMethod(); object myInstance = Activator.CreateInstance(myType); object[] customAttrs = myType.GetCustomAttributes(true); Console.WriteLine("Custom Attributes for Type 'MyType':"); object attrVal = null; foreach (object customAttr in customAttrs) { attrVal = typeof(ClassCreator).InvokeMember("Creator", BindingFlags.GetProperty, null, customAttr, new object[] { }); Console.WriteLine("-- Attribute: [{0} = \"{1}\"]", customAttr, attrVal); } Console.WriteLine("Custom Attributes for Method 'HelloWorld()' in 'MyType':"); customAttrs = myType.GetMember("HelloWorld")[0].GetCustomAttributes(true); foreach (object customAttr in customAttrs) { attrVal = typeof(DateLastUpdated).InvokeMember("DateUpdated", BindingFlags.GetProperty, null, customAttr, new object[] { }); Console.WriteLine("-- Attribute: [{0} = \"{1}\"]", customAttr, attrVal); } Console.WriteLine("---"); Console.WriteLine(myType.InvokeMember("HelloWorld", BindingFlags.InvokeMethod, null, myInstance, new object[] { })); } }
Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)
The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
