次の方法で共有


ModuleBuilder.DefineEnum メソッド

指定した型の value__ という単一の非静的フィールドを持つ値型と共に列挙型を定義します。

Public Function DefineEnum( _
   ByVal name As String, _   ByVal visibility As TypeAttributes, _   ByVal underlyingType As Type _) As EnumBuilder
[C#]
public EnumBuilder DefineEnum(stringname,TypeAttributesvisibility,TypeunderlyingType);
[C++]
public: EnumBuilder* DefineEnum(String* name,TypeAttributesvisibility,Type* underlyingType);
[JScript]
public function DefineEnum(
   name : String,visibility : TypeAttributes,underlyingType : Type) : EnumBuilder;

パラメータ

  • name
    列挙型の完全パス。name には埋め込み null を含めることができません。
  • visibility
    列挙型の型属性。属性は、 VisibilityMask で定義された任意のビットです。
  • underlyingType
    列挙型の基になる型。

戻り値

定義された列挙型を返します。

例外

例外の種類 条件
ArgumentException 可視属性以外の属性が指定されています。

または

指定された名前の列挙型 (Enum) が、このモジュールの親アセンブリに存在します。

または

列挙型 (Enum) のスコープに対して可視属性が正しくありません。たとえば、 NestedPublicvisibility として指定されていて、列挙型 (Enum) が入れ子になった型ではありません。

ArgumentNullException name が null 参照 (Visual Basic では Nothing) です。

解説

定義された列挙型 (Enum) は Enum の派生クラスです。定義されたフィールドには、 PrivateSpecialName が設定されています。

使用例

[Visual Basic, C#, C++] 次のコード例は、 DefineEnum を使用して、動的モジュールの中に列挙体クラスを実装する方法を示しています。

 
Dim currentDomain As AppDomain
Dim myAssemblyName As AssemblyName

' Get the current application domain for the current thread.
currentDomain = AppDomain.CurrentDomain

' Create assembly in current currentDomain
myAssemblyName = New AssemblyName()
myAssemblyName.Name = "TempAssembly"

' Define a dynamic assembly in the 'currentDomain'.
myAssemblyBuilder = currentDomain.DefineDynamicAssembly _ 
                    (myAssemblyName, AssemblyBuilderAccess.Run)

' Define a dynamic module in "TempAssembly" assembly.
myModuleBuilder = myAssemblyBuilder.DefineDynamicModule("TempModule")

' Define a enumeration type with name 'MyEnum' in the 'TempModule'.
Dim myEnumBuilder As EnumBuilder = myModuleBuilder.DefineEnum _ 
                                   ("MyEnum", TypeAttributes.Public, GetType(Integer))

' Define the named static fields in the enumeration type 'MyEnum'.
myEnumBuilder.DefineLiteral("MyEnumMember1", 2)
myEnumBuilder.DefineLiteral("MyEnumMember2", 3)
myEnumBuilder.CreateType()

[C#] 
AppDomain currentDomain;
AssemblyName myAssemblyName;

// Get the current application domain for the current thread.
currentDomain = AppDomain.CurrentDomain;

// Create assembly in current currentDomain
myAssemblyName = new AssemblyName();
myAssemblyName.Name = "TempAssembly";

// Define a dynamic assembly in the 'currentDomain'.
myAssemblyBuilder = 
   currentDomain.DefineDynamicAssembly
               (myAssemblyName, AssemblyBuilderAccess.Run);

// Define a dynamic module in "TempAssembly" assembly.
myModuleBuilder = myAssemblyBuilder.DefineDynamicModule("TempModule");

// Define a enumeration type with name 'MyEnum' in the 'TempModule'.
EnumBuilder myEnumBuilder = myModuleBuilder.DefineEnum("MyEnum",
                     TypeAttributes.Public,typeof(int));

// Define the named static fields in the enumeration type 'MyEnum'.
myEnumBuilder.DefineLiteral("MyEnumMember1",2);
myEnumBuilder.DefineLiteral("MyEnumMember2",3);
myEnumBuilder.CreateType();


[C++] 
AppDomain* currentDomain;
AssemblyName* myAssemblyName;

// Get the current application domain for the current thread.
currentDomain = AppDomain::CurrentDomain;

// Create assembly in current currentDomain
myAssemblyName = new AssemblyName();
myAssemblyName->Name = S"TempAssembly";

// Define a dynamic assembly in the 'currentDomain'.
myAssemblyBuilder = 
   currentDomain->DefineDynamicAssembly(myAssemblyName, AssemblyBuilderAccess::Run);

// Define a dynamic module in "TempAssembly" assembly.
myModuleBuilder = myAssemblyBuilder->DefineDynamicModule(S"TempModule");

// Define a enumeration type with name 'MyEnum' in the 'TempModule'.
EnumBuilder* myEnumBuilder = myModuleBuilder->DefineEnum(S"MyEnum",
   TypeAttributes::Public,__typeof(int));

// Define the named static fields in the enumeration type 'MyEnum'.
myEnumBuilder->DefineLiteral(S"MyEnumMember1",__box(2));
myEnumBuilder->DefineLiteral(S"MyEnumMember2",__box(3));
myEnumBuilder->CreateType();

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

必要条件

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

.NET Framework セキュリティ:

参照

ModuleBuilder クラス | ModuleBuilder メンバ | System.Reflection.Emit 名前空間