EnumBuilder.GetCustomAttributes Metod

Definition

Returnerar de anpassade attribut som definierats för den här konstruktorn.

Överlagringar

Name Description
GetCustomAttributes(Boolean)

Returnerar alla anpassade attribut som definierats för den här konstruktorn.

GetCustomAttributes(Type, Boolean)

Returnerar de anpassade attribut som identifieras av den angivna typen.

GetCustomAttributes(Boolean)

Returnerar alla anpassade attribut som definierats för den här konstruktorn.

public:
 override cli::array <System::Object ^> ^ GetCustomAttributes(bool inherit);
public override object[] GetCustomAttributes(bool inherit);
override this.GetCustomAttributes : bool -> obj[]
Public Overrides Function GetCustomAttributes (inherit As Boolean) As Object()

Parametrar

inherit
Boolean

Anger om du vill söka i den här medlemmens arvskedja för att hitta attributen.

Returer

Object[]

Returnerar en matris med objekt som representerar alla anpassade attribut för konstruktorn som representeras av den här ConstructorBuilder instansen.

Undantag

Den här metoden stöds för närvarande inte i typer som inte är slutförda.

Kommentarer

Om du vill hämta anpassade attribut av en färdig typ hämtar du typen med hjälp av Type.GetType och anropar GetCustomAttributes den returnerade Type.

Följande kodexempel illustrerar användningen av GetCustomAttribute i kontexten EnumBuilderför .

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

Gäller för

GetCustomAttributes(Type, Boolean)

Returnerar de anpassade attribut som identifieras av den angivna typen.

public:
 override cli::array <System::Object ^> ^ GetCustomAttributes(Type ^ attributeType, bool inherit);
public override object[] GetCustomAttributes(Type attributeType, bool inherit);
override this.GetCustomAttributes : Type * bool -> obj[]
Public Overrides Function GetCustomAttributes (attributeType As Type, inherit As Boolean) As Object()

Parametrar

attributeType
Type

Det Type objekt som de anpassade attributen tillämpas på.

inherit
Boolean

Anger om du vill söka i den här medlemmens arvskedja för att hitta attributen.

Returer

Object[]

Returnerar en matris med objekt som representerar attributen för den här konstruktorn som är av TypeattributeType.

Undantag

Den här metoden stöds för närvarande inte i typer som inte är slutförda.

Kommentarer

Om du vill hämta anpassade attribut av en färdig typ hämtar du typen med hjälp av Type.GetType och anropar MemberInfo.GetCustomAttributes den returnerade Type.

Följande kodexempel illustrerar användningen av GetCustomAttribute i kontexten EnumBuilderför .

[AttributeUsage(AttributeTargets.All, AllowMultiple = false)]
public class MyAttribute : Attribute
{
   public String myString;
   public int myInteger;

   public MyAttribute(String myString1, int myInteger1)
   {
      this.myString = myString1;
      this.myInteger = myInteger1;
   }
}

class MyApplication
{
   static AssemblyBuilder myAssemblyBuilder;
   static EnumBuilder myEnumBuilder;

   public static void Main()
   {
      try
      {
         CreateCallee(Thread.GetDomain());
         if(myEnumBuilder.IsDefined(typeof(MyAttribute),false))
         {
            object[] myAttributesArray = myEnumBuilder.GetCustomAttributes(typeof(MyAttribute),false);
            Console.WriteLine("Custom attribute contains: ");
            // Read the attributes and display them on the console.
            for(int index=0; index < myAttributesArray.Length; index++)
            {
               if(myAttributesArray[index] is MyAttribute)
               {
                  Console.WriteLine("The value of myString  is: "
                                    + ((MyAttribute)myAttributesArray[index]).myString);
                  Console.WriteLine("The value of myInteger is: "
                                    + ((MyAttribute)myAttributesArray[index]).myInteger);
               }
            }
         }
         else
         {
            Console.WriteLine("Custom Attributes are not set for the EnumBuilder");
         }
      }
      catch(Exception e)
      {
         Console.WriteLine("The following exception is raised:" +e.Message);
      }
  }

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

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

      Type myType = typeof(MyAttribute);
      ConstructorInfo myInfo = myType.GetConstructor(new Type[2]{typeof(String), typeof(int)});
      CustomAttributeBuilder myCustomAttributeBuilder =
                                    new CustomAttributeBuilder(myInfo, new object[2]{"Hello", 2});

      // 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(myCustomAttributeBuilder);
   }
}
<AttributeUsage(AttributeTargets.All, AllowMultiple := False)>  _
Public Class MyAttribute
   Inherits Attribute
   Public myString As String
   Public myInteger As Integer

   Public Sub New(myString1 As String, myInteger1 As Integer)
      Me.myString = myString1
      Me.myInteger = myInteger1
   End Sub
End Class

Class MyApplication
   Private Shared myAssemblyBuilder As AssemblyBuilder
   Private Shared myEnumBuilder As EnumBuilder

   Public Shared Sub Main()
      Try
         CreateCallee(Thread.GetDomain())
         If myEnumBuilder.IsDefined(GetType(MyAttribute), False) Then
            Dim myAttributesArray As Object() = myEnumBuilder.GetCustomAttributes _
                                                      (GetType(MyAttribute), False)
            Console.WriteLine("Custom attribute contains: ")
            ' Read the attributes and display them on the console.
            Dim index As Integer
            For index = 0 To myAttributesArray.Length - 1
               If TypeOf myAttributesArray(index) Is MyAttribute Then
                  Console.WriteLine("The value of myString  is: " + CType(myAttributesArray(index), _
                                                                           MyAttribute).myString)
                  Console.WriteLine("The value of myInteger is: " + CType(myAttributesArray(index), _
                                                               MyAttribute).myInteger.ToString())
               End If
            Next index
         Else
            Console.WriteLine("Custom Attributes are not set for the EnumBuilder")
         End If
      Catch e As Exception
         Console.WriteLine("The following exception is raised:" + e.Message)
      End Try
   End Sub

   Private Shared Sub CreateCallee(domain As AppDomain)
      ' Create a name for the assembly.
      Dim myAssemblyName As New AssemblyName()
      myAssemblyName.Name = "EmittedAssembly"

      ' Create the dynamic assembly.
      myAssemblyBuilder = domain.DefineDynamicAssembly(myAssemblyName, AssemblyBuilderAccess.Run)

      Dim myType As Type = GetType(MyAttribute)
      Dim myInfo As ConstructorInfo = myType.GetConstructor(New Type(1) {GetType(String), _
                                                                           GetType(Integer)})
      Dim myCustomAttributeBuilder As New CustomAttributeBuilder(myInfo, New Object(1) {"Hello", 2})

      ' 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(myCustomAttributeBuilder)
   End Sub
End Class

Gäller för