EnumBuilder 类
说明并表示枚举类型。
**命名空间:**System.Reflection.Emit
**程序集:**mscorlib(在 mscorlib.dll 中)
语法
声明
<ComVisibleAttribute(True)> _
<ClassInterfaceAttribute(ClassInterfaceType.None)> _
Public NotInheritable Class EnumBuilder
Inherits Type
Implements _EnumBuilder
用法
Dim instance As EnumBuilder
[ComVisibleAttribute(true)]
[ClassInterfaceAttribute(ClassInterfaceType.None)]
public sealed class EnumBuilder : Type, _EnumBuilder
[ComVisibleAttribute(true)]
[ClassInterfaceAttribute(ClassInterfaceType::None)]
public ref class EnumBuilder sealed : public Type, _EnumBuilder
/** @attribute ComVisibleAttribute(true) */
/** @attribute ClassInterfaceAttribute(ClassInterfaceType.None) */
public final class EnumBuilder extends Type implements _EnumBuilder
ComVisibleAttribute(true)
ClassInterfaceAttribute(ClassInterfaceType.None)
public final class EnumBuilder extends Type implements _EnumBuilder
示例
下面的代码示例演示了如何在动态程序集中使用 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
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();
}
}
using namespace System;
using namespace System::Collections;
using namespace System::Threading;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
public ref class MyEnumBuilderSample
{
private:
static AssemblyBuilder^ myAssemblyBuilder;
static ModuleBuilder^ myModuleBuilder;
static EnumBuilder^ myEnumBuilder;
public:
static void Main()
{
try
{
CreateCallee( Thread::GetDomain(), AssemblyBuilderAccess::Save );
array<Type^>^myTypeArray = myModuleBuilder->GetTypes();
IEnumerator^ myEnum = myTypeArray->GetEnumerator();
while ( myEnum->MoveNext() )
{
Type^ myType = safe_cast<Type^>(myEnum->Current);
Console::WriteLine( "Enum Builder defined in the module builder is: {0}", myType->Name );
}
Console::WriteLine( "Enum TypeToken is :{0}", myEnumBuilder->TypeToken );
Console::WriteLine( "Enum UnderLyingField is :{0}", myEnumBuilder->UnderlyingField );
Console::WriteLine( "Enum UnderLyingSystemType is :{0}", myEnumBuilder->UnderlyingSystemType );
Console::WriteLine( "Enum GUID is :{0}", myEnumBuilder->GUID );
myAssemblyBuilder->Save( "EmittedAssembly.dll" );
}
catch ( NotSupportedException^ ex )
{
Console::WriteLine( "The following is the exception is raised: {0}", ex->Message );
}
catch ( Exception^ e )
{
Console::WriteLine( "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 = gcnew 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, Int32::typeid );
FieldBuilder^ myFieldBuilder1 = myEnumBuilder->DefineLiteral( "FieldOne", 1 );
FieldBuilder^ myFieldBuilder2 = myEnumBuilder->DefineLiteral( "FieldTwo", 2 );
myEnumBuilder->CreateType();
}
};
int main()
{
MyEnumBuilderSample::Main();
}
import System.*;
import System.Collections.*;
import System.Threading.*;
import System.Reflection.*;
import System.Reflection.Emit.*;
public class MyEnumBuilderSample
{
private static AssemblyBuilder myAssemblyBuilder;
private static ModuleBuilder myModuleBuilder;
private static EnumBuilder myEnumBuilder;
public static void main(String[] args)
{
try {
CreateCallee(System.Threading.Thread.GetDomain(),
AssemblyBuilderAccess.Save);
Type myTypeArray[] = myModuleBuilder.GetTypes();
Type myType = null;
for (int iCtr = 0; iCtr < myTypeArray.length;iCtr++ ) {
myType = myTypeArray[iCtr];
Console.WriteLine("Enum Builder defined in the module "
+ "builder is: " + myType.get_Name());
}
Console.WriteLine("Enum TypeToken is :"
+ myEnumBuilder.get_TypeToken().ToString());
Console.WriteLine("Enum UnderLyingField is :"
+ myEnumBuilder.get_UnderlyingField().ToString());
Console.WriteLine("Enum UnderLyingSystemType is :"
+ myEnumBuilder.get_UnderlyingSystemType().ToString());
Console.WriteLine("Enum GUID is :"
+ myEnumBuilder.get_GUID().ToString());
myAssemblyBuilder.Save("EmittedAssembly.dll");
}
catch (NotSupportedException ex) {
Console.WriteLine("The following is the exception is raised: "
+ ex.get_Message());
}
catch (System.Exception e) {
Console.WriteLine("The following is the exception raised: "
+ e.get_Message());
}
} //main
private static void CreateCallee(AppDomain myAppDomain,
AssemblyBuilderAccess access)
{
// Create a name for the assembly.
AssemblyName myAssemblyName = new AssemblyName();
myAssemblyName.set_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, Int32.class.ToType());
FieldBuilder myFieldBuilder1 = myEnumBuilder.DefineLiteral("FieldOne",
(Int32)1);
FieldBuilder myFieldBuilder2 = myEnumBuilder.DefineLiteral("FieldTwo",
(Int32)2);
myEnumBuilder.CreateType();
} //CreateCallee
} //MyEnumBuilderSample
继承层次结构
System.Object
System.Reflection.MemberInfo
System.Type
System.Reflection.Emit.EnumBuilder
线程安全
此类型的任何公共静态(Visual Basic 中的 Shared)成员都是线程安全的,但不保证所有实例成员都是线程安全的。
平台
Windows 98、Windows 2000 SP4、Windows Millennium Edition、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition
.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求。
版本信息
.NET Framework
受以下版本支持:2.0、1.1、1.0