EnumBuilder.GetCustomAttributes Yöntem

Tanım

Bu oluşturucu için tanımlanan özel öznitelikleri döndürür.

Aşırı Yüklemeler

GetCustomAttributes(Boolean)

Bu oluşturucu için tanımlanan tüm özel öznitelikleri döndürür.

GetCustomAttributes(Type, Boolean)

Verilen tür tarafından tanımlanan özel öznitelikleri döndürür.

GetCustomAttributes(Boolean)

Kaynak:
EnumBuilder.cs

Bu oluşturucu için tanımlanan tüm özel öznitelikleri döndürür.

C#
public override object[] GetCustomAttributes(bool inherit);

Parametreler

inherit
Boolean

Öznitelikleri bulmak için bu üyenin devralma zincirinde arama yapılıp yapılmayacağını belirtir.

Döndürülenler

Object[]

Bu ConstructorBuilder örnek tarafından temsil edilen oluşturucunun tüm özel özniteliklerini temsil eden bir nesne dizisi döndürür.

Özel durumlar

Bu yöntem şu anda tamamlanmayan türlerde desteklenmiyor.

Açıklamalar

Geçici bir çözüm olarak, tamamlanmış bir türün özel özniteliklerini almak için kullanarak türünü Type.GetType alın ve döndürülen Typeüzerinde çağrısı GetCustomAttributes yapın.

Aşağıdaki kod örneği, bağlamında EnumBuilderkullanımını GetCustomAttribute gösterir.

C#
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});
   }
}

Şunlara uygulanır

.NET 10 ve diğer sürümler
Ürün Sürümler
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0 (package-provided), 2.1

GetCustomAttributes(Type, Boolean)

Kaynak:
EnumBuilder.cs

Verilen tür tarafından tanımlanan özel öznitelikleri döndürür.

C#
public override object[] GetCustomAttributes(Type attributeType, bool inherit);

Parametreler

attributeType
Type

Type Özel özniteliklerin uygulandığı nesne.

inherit
Boolean

Öznitelikleri bulmak için bu üyenin devralma zincirinde arama yapılıp yapılmayacağını belirtir.

Döndürülenler

Object[]

Bu oluşturucunun TypeattributeTypeözniteliklerini temsil eden bir nesne dizisi döndürür.

Özel durumlar

Bu yöntem şu anda tamamlanmayan türlerde desteklenmiyor.

Açıklamalar

Geçici bir çözüm olarak, tamamlanmış bir türün özel özniteliklerini almak için kullanarak türünü Type.GetType alın ve döndürülen Typeüzerinde çağrısı MemberInfo.GetCustomAttributes yapın.

Aşağıdaki kod örneği, bağlamında EnumBuilderkullanımını GetCustomAttribute gösterir.

C#
[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);
   }
}

Şunlara uygulanır

.NET 10 ve diğer sürümler
Ürün Sürümler
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0 (package-provided), 2.1