次の方法で共有


EnumBuilder.GetCustomAttributes メソッド (Boolean)

この型に対して定義されているすべてのカスタム属性を返します。

Overrides Overloads Public Function GetCustomAttributes( _
   ByVal inherit As Boolean _) As Object() Implements ICustomAttributeProvider.GetCustomAttributes
[C#]
public override object[] GetCustomAttributes(boolinherit);
[C++]
public: Object* GetCustomAttributes(boolinherit)  __gc[];
[JScript]
public override function GetCustomAttributes(
   inherit : Boolean) : Object[];

パラメータ

  • inherit
    このメンバの継承チェインを検索して属性を見つけるかどうかを指定します。

戻り値

この ConstructorBuilder インスタンスで表されるコンストラクタのすべてのカスタム属性を表すオブジェクトの配列を返します。

実装

ICustomAttributeProvider.GetCustomAttributes

例外

例外の種類 条件
NotSupportedException このメソッドは現在、不完全な型に対してはサポートされていません。

解説

終了型のカスタム属性を取得する代替手段としては、 Type.GetType を使用して型を取得し、返された Type に対して GetCustomAttributes を呼び出します。

次のコード例は、 EnumBuilder のコンテキストで GetCustomAttribute を使用する方法を示しています。

 
Imports System
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 'New
End Class 'MyAttribute

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 'Main
   
   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 'CreateCallee 
End Class 'MyApplication

[C#] 
using System;
using System.Threading;
using System.Reflection;
using System.Reflection.Emit;


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

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

class MyApplication
{
   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 MyAttribute)
            {
               Console.WriteLine("myBoolValue: " + 
                                       ((MyAttribute)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(MyAttribute);
      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});
      
   }
}

[C++] 
#using <mscorlib.dll>
using namespace System;
using namespace System::Threading;
using namespace System::Reflection;
using namespace System::Reflection::Emit;


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

public:
   MyAttribute(bool myBool)
   {
      this->myBoolValue = myBool;
   }
};

__gc class MyApplication
{
   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(S"Custom attribute contains: ");
         for(int index=0; index < myAttributesArray->Length; index++)
         {
            if(dynamic_cast<MyAttribute*>(myAttributesArray[index]))
            {
               Console::WriteLine(S"myBoolValue: {0}",
                  __box((dynamic_cast<MyAttribute*>(myAttributesArray[index]))->myBoolValue));
            }
         }
      }
      catch(Exception* e)
      {
         Console::WriteLine(S"The following exception is raised:{0}", e->Message);
      }
   }

private:
   static void CreateCallee(AppDomain* ___domain)
   {
      AssemblyName* myAssemblyName = new AssemblyName();
      // Create a name for the assembly.
      myAssemblyName->Name = S"EmittedAssembly";

      // Create the dynamic assembly.
      AssemblyBuilder* myAssemblyBuilder 
         = ___domain->DefineDynamicAssembly(myAssemblyName, AssemblyBuilderAccess::Run); 

      Type* myType = __typeof(MyAttribute);

      Type* temp0 [] = {__typeof(bool)};
      ConstructorInfo* myInfo = myType->GetConstructor(temp0);

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

      // Create a dynamic Enum.
      myEnumBuilder = 
         myModuleBuilder->DefineEnum(S"MyNamespace.MyEnum", TypeAttributes::Public, __typeof(Int32));

      FieldBuilder* myFieldBuilder1 = myEnumBuilder->DefineLiteral(S"FieldOne",__box(1));
      FieldBuilder* myFieldBuilder2 = myEnumBuilder->DefineLiteral(S"FieldTwo",__box(2));  

      myEnumBuilder->CreateType();

      Byte temp1 [] = {01,00,01};
      myEnumBuilder->SetCustomAttribute(myInfo, temp1);

   }
};

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

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

参照

EnumBuilder クラス | EnumBuilder メンバ | System.Reflection.Emit 名前空間 | EnumBuilder.GetCustomAttributes オーバーロードの一覧