EnumBuilder.DefineLiteral(String, Object) Methode

Definition

Definiert das benannte statische Feld in einem Enumerationstyp mit dem angegebenen Konstantenwert.

public:
 System::Reflection::Emit::FieldBuilder ^ DefineLiteral(System::String ^ literalName, System::Object ^ literalValue);
public System.Reflection.Emit.FieldBuilder DefineLiteral(string literalName, object literalValue);
member this.DefineLiteral : string * obj -> System.Reflection.Emit.FieldBuilder
Public Function DefineLiteral (literalName As String, literalValue As Object) As FieldBuilder

Parameter

literalName
String

Der Name des statischen Felds.

literalValue
Object

Der Konstantenwert des Literals.

Gibt zurück

Das definierte Feld.

Beispiele

Im folgenden Codebeispiel wird die Konstruktion einer Enumeration in einer dynamischen Assembly mithilfe EnumBuildervon . Das Beispiel definiert eine Aufzählung namens Elevation, mit einem 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

Das definierte Feld enthält die Feldattribute Public, Staticund Literal es wird festgelegt.

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.

Gilt für: