Share via


EnumBuilder クラス

列挙型を記述し、表現します。

この型のすべてのメンバの一覧については、EnumBuilder メンバ を参照してください。

System.Object
   System.Reflection.MemberInfo
      System.Type
         System.Reflection.Emit.EnumBuilder

NotInheritable Public Class EnumBuilder
   Inherits Type
[C#]
public sealed class EnumBuilder : Type
[C++]
public __gc __sealed class EnumBuilder : public Type
[JScript]
public class EnumBuilder extends Type

スレッドセーフ

Reflection Emit は、Boolean パラメータ isSynchronizedtrue に設定して呼び出した AppDomain.DefineDynamicAssembly メソッドで作成されたアセンブリを使用する場合は、スレッド セーフです。

使用例

[Visual Basic, C#, C++] 次のコード例は、 EnumBuilder を使用して、動的なアセンブリ内に列挙体を作成する方法を示しています。

 
Imports System
Imports System.Collections
Imports System.Threading
Imports System.Reflection
Imports System.Reflection.Emit

Public Class MyEnumBuilderSample
   Private Shared myAssemblyBuilder As AssemblyBuilder
   Private Shared myModuleBuilder As ModuleBuilder
   Private Shared myEnumBuilder As EnumBuilder
   
   
   Public Shared Sub Main()
      Try
         CreateCallee(Thread.GetDomain(), AssemblyBuilderAccess.Save)
         Dim myTypeArray As Type() = myModuleBuilder.GetTypes()
         Dim myType As Type
         For Each myType In  myTypeArray
            Console.WriteLine("Enum Builder defined in the module builder is: " + myType.Name)
         Next myType
         
         Console.WriteLine("Enum TypeToken is :" + myEnumBuilder.TypeToken.ToString())
         Console.WriteLine("Enum UnderLyingField is :" + myEnumBuilder.UnderlyingField.ToString())
         Console.WriteLine("Enum UnderLyingSystemType is :" + myEnumBuilder.UnderlyingSystemType.ToString())
         Console.WriteLine("Enum GUID is :" + myEnumBuilder.GUID.ToString())
         myAssemblyBuilder.Save("EmittedAssembly.dll")
      Catch ex As NotSupportedException
         Console.WriteLine("The following is the exception is raised: " + ex.Message)
      Catch e As Exception
         Console.WriteLine("The following is the exception raised: " + e.Message)
      End Try
   End Sub 'Main
   
   
   Private Shared Sub CreateCallee(myAppDomain As AppDomain, access As AssemblyBuilderAccess)
      ' Create a name for the assembly.
      Dim myAssemblyName As New AssemblyName()
      myAssemblyName.Name = "EmittedAssembly"
      
      ' Create the dynamic assembly.
      myAssemblyBuilder = myAppDomain.DefineDynamicAssembly(myAssemblyName, _
                 AssemblyBuilderAccess.Save)
      ' Create a dynamic module.
      myModuleBuilder = myAssemblyBuilder.DefineDynamicModule("EmittedModule", "EmittedModule.mod")
      ' 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()
   End Sub 'CreateCallee
End Class 'MyEnumBuilderSample

[C#] 

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

public class MyEnumBuilderSample
{
   static AssemblyBuilder myAssemblyBuilder;
   static ModuleBuilder myModuleBuilder;
   static EnumBuilder myEnumBuilder;
   
   public static void Main()
   {
      try
      {
         CreateCallee(Thread.GetDomain(), AssemblyBuilderAccess.Save);
         Type[] myTypeArray = myModuleBuilder.GetTypes();
         foreach(Type myType in myTypeArray)
         {
            Console.WriteLine("Enum Builder defined in the module builder is: " 
               + myType.Name);
         }

         Console.WriteLine("Enum TypeToken is :" +  
                                       myEnumBuilder.TypeToken.ToString());
         Console.WriteLine("Enum UnderLyingField is :" +  
                                    myEnumBuilder.UnderlyingField.ToString());
         Console.WriteLine("Enum UnderLyingSystemType is :" +  
                              myEnumBuilder.UnderlyingSystemType.ToString());
         Console.WriteLine("Enum GUID is :" + myEnumBuilder.GUID.ToString());
         myAssemblyBuilder.Save("EmittedAssembly.dll");
      }
      catch(NotSupportedException ex)
      {
         Console.WriteLine("The following is the exception is raised: " + ex.Message);
      }
      catch(Exception e)
      {
         Console.WriteLine("The following is the exception raised: " + e.Message);
      }
   }

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

      // Create the dynamic assembly.
      myAssemblyBuilder = myAppDomain.DefineDynamicAssembly(myAssemblyName, 
                                             AssemblyBuilderAccess.Save);
      // Create a dynamic module.
      myModuleBuilder = myAssemblyBuilder.DefineDynamicModule("EmittedModule", 
                                                         "EmittedModule.mod");
      // 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();
   }
}

[C++] 

#using <mscorlib.dll>
using namespace System;
using namespace System::Collections;
using namespace System::Threading;
using namespace System::Reflection;
using namespace System::Reflection::Emit;

public __gc class MyEnumBuilderSample
{
   static AssemblyBuilder* myAssemblyBuilder;
   static ModuleBuilder* myModuleBuilder;
   static EnumBuilder* myEnumBuilder;

public:   
   static void Main()
   {
      try
      {
         CreateCallee(Thread::GetDomain(), AssemblyBuilderAccess::Save);
         Type* myTypeArray[] = myModuleBuilder->GetTypes();
         IEnumerator* myEnum = myTypeArray->GetEnumerator();
         while (myEnum->MoveNext())
         {
             Type* myType = __try_cast<Type*>(myEnum->Current);
            Console::WriteLine(S"Enum Builder defined in the module builder is: {0}", myType->Name);
         }

         Console::WriteLine(S"Enum TypeToken is :{0}", __box(myEnumBuilder->TypeToken));
         Console::WriteLine(S"Enum UnderLyingField is :{0}", myEnumBuilder->UnderlyingField);
         Console::WriteLine(S"Enum UnderLyingSystemType is :{0}", myEnumBuilder->UnderlyingSystemType);
         Console::WriteLine(S"Enum GUID is :{0}", __box(myEnumBuilder->GUID));
         myAssemblyBuilder->Save(S"EmittedAssembly.dll");
      }
      catch(NotSupportedException* ex)
      {
         Console::WriteLine(S"The following is the exception is raised: {0}", ex->Message);
      }
      catch(Exception* e)
      {
         Console::WriteLine(S"The following is the exception raised: {0}", e->Message);
      }
   }

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

      // Create the dynamic assembly.
      myAssemblyBuilder = myAppDomain->DefineDynamicAssembly(myAssemblyName, 
                                             AssemblyBuilderAccess::Save);
      // Create a dynamic module.
      myModuleBuilder = myAssemblyBuilder->DefineDynamicModule(S"EmittedModule", 
                                                         S"EmittedModule.mod");
      // 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();
   }
};

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

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

名前空間: System.Reflection.Emit

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

アセンブリ: Mscorlib (Mscorlib.dll 内)

参照

EnumBuilder メンバ | System.Reflection.Emit 名前空間