EnumBuilder.DefineLiteral(String, Object) Método

Definição

Define o campo estático chamado em um tipo de enumeração com o valor constante especificado.

C#
public System.Reflection.Emit.FieldBuilder DefineLiteral(string literalName, object? literalValue);
C#
public System.Reflection.Emit.FieldBuilder DefineLiteral(string literalName, object literalValue);

Parâmetros

literalName
String

O nome do campo estático.

literalValue
Object

O valor constante do literal.

Retornos

O campo definido.

Exemplos

O exemplo de código a seguir demonstra a construção de uma enumeração em um assembly dinâmico, usando EnumBuilder. O exemplo define uma enumeração chamada Elevation, com um tipo subjacente de Int32e cria dois elementos: Low, com um valor de 0 e High, com um valor de 1. Depois que o tipo for criado, o assembly será salvo com o nome TempAssembly.dll. Você pode usar o Ildasm.exe (Il Disassembler) para examinar o conteúdo deste assembly.

Observação

Antes do .NET Framework versão 2.0, este exemplo de código não produz uma enumeração correta.

C#
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
 */

Comentários

O campo definido terá os atributos Publicde campo , Statice Literal definidos.

Observação

No .NET Framework versões 1.0 e 1.1, é necessário definir enumerações usando TypeBuilder porque EnumBuilder emite enumerações cujos elementos são do tipo Int32 em vez do tipo de enumeração. No .NET Framework versão 2.0, EnumBuilder emite enumerações cujos elementos têm o tipo correto.

Aplica-se a

Produto Versões
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0 (package-provided), 2.1