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) のスコープに対して可視属性が正しくありません。たとえば、 NestedPublic が visibility として指定されていて、列挙型 (Enum) が入れ子になった型ではありません。 |
ArgumentNullException | name が null 参照 (Visual Basic では Nothing) です。 |
解説
定義された列挙型 (Enum) は Enum の派生クラスです。定義されたフィールドには、 Private と SpecialName が設定されています。
使用例
[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 セキュリティ:
- ReflectionPermission SecurityAction.Demand、ReflectionEmit
参照
ModuleBuilder クラス | ModuleBuilder メンバ | System.Reflection.Emit 名前空間