ModuleBuilder.DefineEnum(String, TypeAttributes, Type) Methode

Definitie

Definieert een opsommingstype dat een waardetype is met één niet-statisch veld dat van het opgegeven type wordt aangeroepen 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

Parameters

name
String

Het volledige pad van het opsommingstype. name kan geen ingesloten null-waarden bevatten.

visibility
TypeAttributes

De typekenmerken voor de opsomming. De kenmerken zijn bits die zijn gedefinieerd door VisibilityMask.

underlyingType
Type

Het onderliggende type voor de opsomming. Dit moet een ingebouwd geheel getal zijn.

Retouren

De gedefinieerde opsomming.

Uitzonderingen

Er worden andere kenmerken dan zichtbaarheidskenmerken opgegeven.

– of –

Er bestaat een opsomming met de opgegeven naam in de bovenliggende assembly van deze module.

– of –

De zichtbaarheidskenmerken komen niet overeen met het bereik van de opsomming. Is bijvoorbeeld NestedPublic opgegeven voor visibility, maar de opsomming is geen genest type.

name is null.

Voorbeelden

Het volgende voorbeeld illustreert het gebruik van het implementeren van DefineEnum een opsommingsklasse in een dynamische module. In het voorbeeld wordt een opsomming gedefinieerd Elevation die een onderliggend type Int32heeft en twee elementen maakt: Low, met een waarde van 0 en High, met een waarde van 1. Nadat het type is gemaakt, wordt de assembly opgeslagen met de naam TempAssembly.dll. U kunt de Ildasm.exe (IL Disassembler) gebruiken om de inhoud van deze assembly te onderzoeken.

Note

Vóór het .NET Framework versie 2.0 produceert dit codevoorbeeld geen juiste opsomming.

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

Opmerkingen

De gedefinieerde enum is een afgeleide klasse van Enum. Het value__ veld heeft Private en SpecialName de kenmerken zijn ingesteld.

Zie Het overzicht van de klassenbibliotheek voor meer informatie over de ingebouwde typen gehele getallen die kunnen worden opgegeven als de onderliggende typen opsommingen.

Note

In .NET Framework-versie 1.0 en 1.1 moet u opsommingen definiëren met behulp van TypeBuilder omdat EnumBuilder opsommingen verzendt waarvan de elementen van het type Int32 in plaats van het opsommingstype zijn. In het .NET Framework versie 2.0 verzendt EnumBuilder opsommingen waarvan de elementen het juiste type hebben.

Van toepassing op