Język

EnumBuilder.DefineLiteral(String, Object) Metoda

Definicja

Definiuje nazwane pole statyczne w typie wyliczenia z określoną wartością stałą.

public:
 System::Reflection::Emit::FieldBuilder ^ DefineLiteral(System::String ^ literalName, System::Object ^ literalValue);
public System.Reflection.Emit.FieldBuilder DefineLiteral(string literalName, 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

Parametry

literalName
String

Nazwa pola statycznego.

literalValue
Object

Stała wartość literału.

Zwraca

Zdefiniowane pole.

Przykłady

Poniższy przykład kodu przedstawia konstrukcję wyliczenia w zestawie dynamicznym przy użyciu polecenia EnumBuilder. W przykładzie zdefiniowano wyliczenie o nazwie Elevation, z bazowym typem Int32, i tworzy dwa elementy: Low, z wartością 0 i High, z wartością 1. Po utworzeniu typu zestaw zostanie zapisany przy użyciu nazwy TempAssembly.dll. Aby sprawdzić zawartość tego zestawu, możesz użyć Ildasm.exe (dezasembler IL ).

Note

Przed .NET Framework w wersji 2.0 ten przykład kodu nie generuje poprawnego wyliczenia.

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

Uwagi

Zdefiniowane pole będzie mieć atrybuty Publicpola , Statici Literal ustawione.

Note

W .NET Framework w wersji 1.0 i 1.1 należy zdefiniować wyliczenia przy użyciu TypeBuilder, ponieważ EnumBuilder emituje wyliczenia, których elementy są typu Int32 zamiast typu wyliczenia. W .NET Framework w wersji 2.0 EnumBuilder emituje wyliczenia, których elementy mają poprawny typ.

Dotyczy