ModuleBuilder.DefineEnum(String, TypeAttributes, Type) Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Definiert einen Enumerationstyp, bei dem es sich um einen Werttyp mit einem einzelnen nicht statischen Feld handelt, das vom angegebenen Typ aufgerufen wird value__ .
public:
System::Reflection::Emit::EnumBuilder ^ DefineEnum(System::String ^ name, System::Reflection::TypeAttributes visibility, Type ^ underlyingType);
public System.Reflection.Emit.EnumBuilder DefineEnum(string name, System.Reflection.TypeAttributes visibility, Type underlyingType);
member this.DefineEnum : string * System.Reflection.TypeAttributes * Type -> System.Reflection.Emit.EnumBuilder
Public Function DefineEnum (name As String, visibility As TypeAttributes, underlyingType As Type) As EnumBuilder
Parameter
- name
- String
Der vollständige Pfad des Enumerationstyps.
name Eingebettete Nullwerte können nicht enthalten.
- visibility
- TypeAttributes
Die Typattribute für die Enumeration. Die Attribute sind alle bits definiert durch VisibilityMask.
- underlyingType
- Type
Der zugrunde liegende Typ für die Aufzählung. Dies muss ein integrierter ganzzahliger Typ sein.
Gibt zurück
Die definierte Enumeration.
Ausnahmen
Andere Attribute als Sichtbarkeitsattribute werden bereitgestellt.
-oder-
Eine Aufzählung mit dem angegebenen Namen ist in der übergeordneten Assembly dieses Moduls vorhanden.
-oder-
Die Sichtbarkeitsattribute stimmen nicht mit dem Bereich der Enumeration überein. Beispiel: Wird für visibilityangegeben, NestedPublic aber die Aufzählung ist kein geschachtelter Typ.
name ist null.
Beispiele
Im folgenden Beispiel wird die Verwendung DefineEnum einer Enumerationsklasse in einem dynamischen Modul veranschaulicht. Im Beispiel wird eine Aufzählung definiert Elevation , die einen zugrunde liegenden Typ von Int32, und erstellt zwei Elemente: Low, mit dem Wert 0 und High, mit dem Wert 1. Nachdem der Typ erstellt wurde, wird die Assembly mit dem Namen TempAssembly.dllgespeichert. Sie können die Ildasm.exe (IL Disassembler) verwenden, um den Inhalt dieser Assembly zu untersuchen.
Note
Vor der .NET Framework-Version 2.0 erzeugt dieses Codebeispiel keine korrekte Enumeration.
using System;
using System.Reflection;
using System.Reflection.Emit;
class Example
{
public static void Main()
{
// Get the current application domain for the current thread.
AppDomain currentDomain = AppDomain.CurrentDomain;
// Create a dynamic assembly in the current application domain,
// and allow it to be executed and saved to disk.
AssemblyName aName = new AssemblyName("TempAssembly");
AssemblyBuilder ab = currentDomain.DefineDynamicAssembly(
aName, AssemblyBuilderAccess.RunAndSave);
// Define a dynamic module in "TempAssembly" assembly. For a single-
// module assembly, the module has the same name as the assembly.
ModuleBuilder mb = ab.DefineDynamicModule(aName.Name, aName.Name + ".dll");
// Define a public enumeration with the name "Elevation" and an
// underlying type of Integer.
EnumBuilder eb = mb.DefineEnum("Elevation", TypeAttributes.Public, typeof(int));
// Define two members, "High" and "Low".
eb.DefineLiteral("Low", 0);
eb.DefineLiteral("High", 1);
// Create the type and save the assembly.
Type finished = eb.CreateType();
ab.Save(aName.Name + ".dll");
foreach( object o in Enum.GetValues(finished) )
{
Console.WriteLine("{0}.{1} = {2}", finished, o, ((int) o));
}
}
}
/* This code example produces the following output:
Elevation.Low = 0
Elevation.High = 1
*/
Imports System.Reflection
Imports System.Reflection.Emit
Module Example
Sub Main()
' Get the current application domain for the current thread.
Dim currentDomain As AppDomain = AppDomain.CurrentDomain
' Create a dynamic assembly in the current application domain,
' and allow it to be executed and saved to disk.
Dim aName As AssemblyName = New AssemblyName("TempAssembly")
Dim ab As AssemblyBuilder = currentDomain.DefineDynamicAssembly( _
aName, AssemblyBuilderAccess.RunAndSave)
' Define a dynamic module in "TempAssembly" assembly. For a single-
' module assembly, the module has the same name as the assembly.
Dim mb As ModuleBuilder = _
ab.DefineDynamicModule(aName.Name, aName.Name & ".dll")
' Define a public enumeration with the name "Elevation" and an
' underlying type of Integer.
Dim eb As EnumBuilder = _
mb.DefineEnum("Elevation", TypeAttributes.Public, GetType(Integer))
' Define two members, "High" and "Low".
eb.DefineLiteral("Low", 0)
eb.DefineLiteral("High", 1)
' Create the type and save the assembly.
Dim finished As Type = eb.CreateType()
ab.Save(aName.Name & ".dll")
For Each o As Object In [Enum].GetValues(finished)
Console.WriteLine("{0}.{1} = {2}", finished, o, CInt(o))
Next
End Sub
End Module
' This code example produces the following output:
'
'Elevation.Low = 0
'Elevation.High = 1
Hinweise
Die definierte Enumeration ist eine abgeleitete Klasse von Enum. Das value__ Feld hat Private und SpecialName Attribute festgelegt.
Weitere Informationen zu den integrierten ganzzahligen Typen, die als zugrunde liegende Enumerationstypen angegeben werden können, finden Sie unter Class Library Overview.
Note
In .NET Framework-Versionen 1.0 und 1.1 ist es erforderlich, Enumerationen mithilfe von TypeBuilder zu definieren, da EnumBuilder Enumerationen ausgibt, deren Elemente vom Typ Int32 anstelle des Enumerationstyps sind. In der .NET Framework-Version 2.0 gibt EnumBuilder Enumerationen aus, deren Elemente den richtigen Typ aufweisen.