EnumBuilder.SetCustomAttribute Methode

Definitie

Hiermee stelt u aangepaste kenmerken voor deze constructor in.

Overloads

Name Description
SetCustomAttribute(ConstructorInfo, Byte[])

Hiermee stelt u een aangepast kenmerk in met behulp van een opgegeven aangepaste kenmerk-blob.

SetCustomAttribute(CustomAttributeBuilder)

Hiermee stelt u een aangepast kenmerk in met behulp van een opbouwfunctie voor aangepaste kenmerken.

SetCustomAttribute(ConstructorInfo, Byte[])

Bron:
EnumBuilder.cs
Bron:
EnumBuilder.cs
Bron:
EnumBuilder.cs
Bron:
EnumBuilder.cs
Bron:
EnumBuilder.cs

Hiermee stelt u een aangepast kenmerk in met behulp van een opgegeven aangepaste kenmerk-blob.

public:
 void SetCustomAttribute(System::Reflection::ConstructorInfo ^ con, cli::array <System::Byte> ^ binaryAttribute);
public void SetCustomAttribute(System.Reflection.ConstructorInfo con, byte[] binaryAttribute);
[System.Runtime.InteropServices.ComVisible(true)]
public void SetCustomAttribute(System.Reflection.ConstructorInfo con, byte[] binaryAttribute);
member this.SetCustomAttribute : System.Reflection.ConstructorInfo * byte[] -> unit
[<System.Runtime.InteropServices.ComVisible(true)>]
member this.SetCustomAttribute : System.Reflection.ConstructorInfo * byte[] -> unit
Public Sub SetCustomAttribute (con As ConstructorInfo, binaryAttribute As Byte())

Parameters

con
ConstructorInfo

De constructor voor het aangepaste kenmerk.

binaryAttribute
Byte[]

Een byte-blob die de kenmerken vertegenwoordigt.

Kenmerken

Uitzonderingen

con of binaryAttribute is null.

Voorbeelden

Het volgende codevoorbeeld illustreert het gebruik van SetCustomAttribute in de context van EnumBuilder, waarbij een byte-blob wordt doorgegeven.

using System;
using System.Threading;
using System.Reflection;
using System.Reflection.Emit;

[AttributeUsage(AttributeTargets.All, AllowMultiple = false)]
public class MyAttribute2 : Attribute
{
   public bool myBoolValue;

   public MyAttribute2(bool myBool)
   {
      this.myBoolValue = myBool;
   }
}

class MyApplication2
{
   static EnumBuilder myEnumBuilder;

   public static void Main()
   {
      try
      {
         CreateCallee(Thread.GetDomain());
         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(myAttributesArray[index] is MyAttribute2)
            {
               Console.WriteLine("myBoolValue: " +
                                       ((MyAttribute2)myAttributesArray[index]).myBoolValue);
            }
         }
      }
      catch(Exception e)
      {
         Console.WriteLine("The following exception is raised:" +e.Message);
      }
   }

   private static void CreateCallee(AppDomain domain)
   {
      AssemblyName myAssemblyName = new AssemblyName();
      // Create a name for the assembly.
      myAssemblyName.Name = "EmittedAssembly";

      // Create the dynamic assembly.
      AssemblyBuilder myAssemblyBuilder
                  = domain.DefineDynamicAssembly(myAssemblyName, AssemblyBuilderAccess.Run);

      Type myType = typeof(MyAttribute2);
      ConstructorInfo myInfo = myType.GetConstructor(new Type[]{typeof(bool)});

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

      // Create a dynamic Enum.
      myEnumBuilder =
         myModuleBuilder.DefineEnum("MyNamespace.MyEnum", TypeAttributes.Public, typeof(Int32));

      FieldBuilder myFieldBuilder1 = myEnumBuilder.DefineLiteral("FieldOne", 1);
      FieldBuilder myFieldBuilder2 = myEnumBuilder.DefineLiteral("FieldTwo", 2);

      myEnumBuilder.CreateType();
      myEnumBuilder.SetCustomAttribute(myInfo, new byte[]{01,00,01});
   }
}
Imports System.Threading
Imports System.Reflection
Imports System.Reflection.Emit

<AttributeUsage(AttributeTargets.All, AllowMultiple := False)>  _
Public Class MyAttribute
   Inherits Attribute
   Public myBoolValue As Boolean
   
   Public Sub New(myBool As Boolean)
      Me.myBoolValue = myBool
   End Sub
End Class

Class MyApplication
   Private Shared myEnumBuilder As EnumBuilder
   
   Public Shared Sub Main()
      Try
         CreateCallee(Thread.GetDomain())
         Dim myAttributesArray As Object() = myEnumBuilder.GetCustomAttributes(True)
         
         ' Read the attributes and display them on the console.
         Console.WriteLine("Custom attribute contains: ")
         Dim index As Integer
         For index = 0 To myAttributesArray.Length - 1
            If TypeOf myAttributesArray(index) Is MyAttribute Then
               Console.WriteLine("myBoolValue: " + CType(myAttributesArray(index), MyAttribute). _
                                                                           myBoolValue.ToString())
            End If
         Next index
      Catch e As Exception
         Console.WriteLine("The following exception is raised:" + e.Message)
      End Try
   End Sub
   
   Private Shared Sub CreateCallee(domain As AppDomain)
      Dim myAssemblyName As New AssemblyName()
      ' Create a name for the assembly.
      myAssemblyName.Name = "EmittedAssembly"
      
      ' Create the dynamic assembly.
      Dim myAssemblyBuilder As AssemblyBuilder = domain.DefineDynamicAssembly(myAssemblyName, _
                                                                  AssemblyBuilderAccess.Run)
      
      Dim myType As Type = GetType(MyAttribute)
      Dim myInfo As ConstructorInfo = myType.GetConstructor(New Type() {GetType(Boolean)})
      
      ' Create a dynamic module.
      Dim myModuleBuilder As ModuleBuilder = myAssemblyBuilder.DefineDynamicModule("EmittedModule")
      
      ' Create a dynamic Enum.
      myEnumBuilder = myModuleBuilder.DefineEnum("MyNamespace.MyEnum", TypeAttributes.Public, _
                                                                              GetType(Int32))
      
      Dim myFieldBuilder1 As FieldBuilder = myEnumBuilder.DefineLiteral("FieldOne", 1)
      Dim myFieldBuilder2 As FieldBuilder = myEnumBuilder.DefineLiteral("FieldTwo", 2)
      
      myEnumBuilder.CreateType()
      myEnumBuilder.SetCustomAttribute(myInfo, New Byte() {1, 0, 1})
   End Sub
End Class

Opmerkingen

Zie de metagegevensspecificatie in Partitie II van de binaryAttribute voor informatie over het opmaken.

Van toepassing op

SetCustomAttribute(CustomAttributeBuilder)

Bron:
EnumBuilder.cs
Bron:
EnumBuilder.cs
Bron:
EnumBuilder.cs
Bron:
EnumBuilder.cs
Bron:
EnumBuilder.cs

Hiermee stelt u een aangepast kenmerk in met behulp van een opbouwfunctie voor aangepaste kenmerken.

public:
 void SetCustomAttribute(System::Reflection::Emit::CustomAttributeBuilder ^ customBuilder);
public void SetCustomAttribute(System.Reflection.Emit.CustomAttributeBuilder customBuilder);
member this.SetCustomAttribute : System.Reflection.Emit.CustomAttributeBuilder -> unit
Public Sub SetCustomAttribute (customBuilder As CustomAttributeBuilder)

Parameters

customBuilder
CustomAttributeBuilder

Een exemplaar van een helperklasse om het aangepaste kenmerk te definiƫren.

Uitzonderingen

customBuilder is null.

Voorbeelden

Het volgende codevoorbeeld illustreert het gebruik van SetCustomAttribute in de context van het doorgeven van EnumBuildereen CustomAttributeBuilder.

using System;
using System.Threading;
using System.Reflection;
using System.Reflection.Emit;

[AttributeUsage(AttributeTargets.All, AllowMultiple = false)]
public class MyAttribute2 : Attribute
{
   public bool myBoolValue;

   public MyAttribute2(bool myBool)
   {
      this.myBoolValue = myBool;
   }
}

class MyApplication2
{
   static EnumBuilder myEnumBuilder;

   public static void Main()
   {
      try
      {
         CreateCallee(Thread.GetDomain());
         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(myAttributesArray[index] is MyAttribute2)
            {
               Console.WriteLine("myBoolValue: " +
                                       ((MyAttribute2)myAttributesArray[index]).myBoolValue);
            }
         }
      }
      catch(Exception e)
      {
         Console.WriteLine("The following exception is raised:" +e.Message);
      }
   }

   private static void CreateCallee(AppDomain domain)
   {
      AssemblyName myAssemblyName = new AssemblyName();
      // Create a name for the assembly.
      myAssemblyName.Name = "EmittedAssembly";

      // Create the dynamic assembly.
      AssemblyBuilder myAssemblyBuilder
                  = domain.DefineDynamicAssembly(myAssemblyName, AssemblyBuilderAccess.Run);

      Type myType = typeof(MyAttribute2);
      ConstructorInfo myInfo = myType.GetConstructor(new Type[]{typeof(bool)});

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

      // Create a dynamic Enum.
      myEnumBuilder =
         myModuleBuilder.DefineEnum("MyNamespace.MyEnum", TypeAttributes.Public, typeof(Int32));

      FieldBuilder myFieldBuilder1 = myEnumBuilder.DefineLiteral("FieldOne", 1);
      FieldBuilder myFieldBuilder2 = myEnumBuilder.DefineLiteral("FieldTwo", 2);

      myEnumBuilder.CreateType();
      myEnumBuilder.SetCustomAttribute(myInfo, new byte[]{01,00,01});
   }
}
Imports System.Threading
Imports System.Reflection
Imports System.Reflection.Emit

<AttributeUsage(AttributeTargets.All, AllowMultiple := False)>  _
Public Class MyAttribute
   Inherits Attribute
   Public myBoolValue As Boolean
   
   Public Sub New(myBool As Boolean)
      Me.myBoolValue = myBool
   End Sub
End Class

Class MyApplication
   Private Shared myEnumBuilder As EnumBuilder
   
   Public Shared Sub Main()
      Try
         CreateCallee(Thread.GetDomain())
         Dim myAttributesArray As Object() = myEnumBuilder.GetCustomAttributes(True)
         
         ' Read the attributes and display them on the console.
         Console.WriteLine("Custom attribute contains: ")
         Dim index As Integer
         For index = 0 To myAttributesArray.Length - 1
            If TypeOf myAttributesArray(index) Is MyAttribute Then
               Console.WriteLine("myBoolValue: " + CType(myAttributesArray(index), MyAttribute). _
                                                                           myBoolValue.ToString())
            End If
         Next index
      Catch e As Exception
         Console.WriteLine("The following exception is raised:" + e.Message)
      End Try
   End Sub
   
   Private Shared Sub CreateCallee(domain As AppDomain)
      Dim myAssemblyName As New AssemblyName()
      ' Create a name for the assembly.
      myAssemblyName.Name = "EmittedAssembly"
      
      ' Create the dynamic assembly.
      Dim myAssemblyBuilder As AssemblyBuilder = domain.DefineDynamicAssembly(myAssemblyName, _
                                                                  AssemblyBuilderAccess.Run)
      
      Dim myType As Type = GetType(MyAttribute)
      Dim myInfo As ConstructorInfo = myType.GetConstructor(New Type() {GetType(Boolean)})
      
      ' Create a dynamic module.
      Dim myModuleBuilder As ModuleBuilder = myAssemblyBuilder.DefineDynamicModule("EmittedModule")
      
      ' Create a dynamic Enum.
      myEnumBuilder = myModuleBuilder.DefineEnum("MyNamespace.MyEnum", TypeAttributes.Public, _
                                                                              GetType(Int32))
      
      Dim myFieldBuilder1 As FieldBuilder = myEnumBuilder.DefineLiteral("FieldOne", 1)
      Dim myFieldBuilder2 As FieldBuilder = myEnumBuilder.DefineLiteral("FieldTwo", 2)
      
      myEnumBuilder.CreateType()
      myEnumBuilder.SetCustomAttribute(myInfo, New Byte() {1, 0, 1})
   End Sub
End Class

Van toepassing op