EnumBuilder::SetCustomAttribute Method (CustomAttributeBuilder^)

 

Sets a custom attribute using a custom attribute builder.

Namespace:   System.Reflection.Emit
Assembly:  mscorlib (in mscorlib.dll)

public:
void SetCustomAttribute(
	CustomAttributeBuilder^ customBuilder
)

Parameters

customBuilder
Type: System.Reflection.Emit::CustomAttributeBuilder^

An instance of a helper class to define the custom attribute.

Exception Condition
ArgumentNullException

con is null.

The following code sample illustrates the use of SetCustomAttribute in the context of EnumBuilder, passing a CustomAttributeBuilder.

using namespace System;
using namespace System::Threading;
using namespace System::Reflection;
using namespace System::Reflection::Emit;

[AttributeUsage(AttributeTargets::All,AllowMultiple=false)]
public ref class MyAttribute: public Attribute
{
public:
   bool myBoolValue;
   MyAttribute( bool myBool )
   {
      this->myBoolValue = myBool;
   }
};

ref class MyApplication
{
private:
   static EnumBuilder^ myEnumBuilder;

public:
   static void Main()
   {
      try
      {
         CreateCallee( Thread::GetDomain() );
         array<Object^>^myAttributesArray = myEnumBuilder->GetCustomAttributes( true );

         // Read the attributes and display them on the console.
         Console::WriteLine( "Custom attribute contains: " );
         for ( int index = 0; index < myAttributesArray->Length; index++ )
         {
            if ( dynamic_cast<MyAttribute^>(myAttributesArray[ index ]) )
            {
               Console::WriteLine( "myBoolValue: {0}", (dynamic_cast<MyAttribute^>(myAttributesArray[ index ]))->myBoolValue );
            }
         }
      }
      catch ( Exception^ e ) 
      {
         Console::WriteLine( "The following exception is raised:{0}", e->Message );
      }

   }

private:
   static void CreateCallee( AppDomain^ domain )
   {
      AssemblyName^ myAssemblyName = gcnew AssemblyName;

      // Create a name for the assembly.
      myAssemblyName->Name = "EmittedAssembly";

      // Create the dynamic assembly.
      AssemblyBuilder^ myAssemblyBuilder = domain->DefineDynamicAssembly( myAssemblyName, AssemblyBuilderAccess::Run );
      Type^ myType = MyAttribute::typeid;
      array<Type^>^temp0 = {bool::typeid};
      ConstructorInfo^ myInfo = myType->GetConstructor( temp0 );

      // Create a dynamic module.
      ModuleBuilder^ myModuleBuilder = myAssemblyBuilder->DefineDynamicModule( "EmittedModule" );

      // Create a dynamic Enum.
      myEnumBuilder = myModuleBuilder->DefineEnum( "MyNamespace.MyEnum", TypeAttributes::Public, Int32::typeid );
      FieldBuilder^ myFieldBuilder1 = myEnumBuilder->DefineLiteral( "FieldOne", 1 );
      FieldBuilder^ myFieldBuilder2 = myEnumBuilder->DefineLiteral( "FieldTwo", 2 );
      myEnumBuilder->CreateType();
      array<Byte>^temp1 = {01,00,01};
      myEnumBuilder->SetCustomAttribute( myInfo, temp1 );
   }
};

int main()
{
   MyApplication::Main();
}

.NET Framework
Available since 1.1
Silverlight
Available since 2.0
Return to top
Show: