Ce sujet n'a pas encore été évalué - Évaluez ce sujet

EnumBuilder, classe

Mise à jour : novembre 2007

Décrit et représente un type d'énumération.

Espace de noms :  System.Reflection.Emit
Assembly :  mscorlib (dans mscorlib.dll)

[ComVisibleAttribute(true)]
[ClassInterfaceAttribute(ClassInterfaceType.None)]
[HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)]
public sealed class EnumBuilder : Type, 
	_EnumBuilder
/** @attribute ComVisibleAttribute(true) */
/** @attribute ClassInterfaceAttribute(ClassInterfaceType.None) */
/** @attribute HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true) */
public final class EnumBuilder extends Type implements _EnumBuilder
public final class EnumBuilder extends Type implements _EnumBuilder
Remarque :

L'attribut HostProtectionAttribute appliqué à ce type ou membre a la valeur de propriété Resources suivante : MayLeakOnAbort. HostProtectionAttribute n'affecte pas les applications bureautiques (qui sont généralement démarrées en double-cliquant sur une icône, en tapant une commande ou en entrant une URL dans un navigateur). Pour plus d'informations, consultez la classe HostProtectionAttribute ou Attributs de programmation et de protection des hôtes SQL Server.

Remarque :

Dans les versions 1.0 et 1.1 du .NET Framework, il est nécessaire de définir des énumérations à l'aide de TypeBuilder car EnumBuilder émet des énumérations dont les éléments sont de type Int32 au lieu du type de l'énumération. Dans le .NET Framework version 2.0, EnumBuilder émet des énumérations dont les éléments ont le type correct.

L'exemple de code suivant illustre la construction d'une énumération à l'intérieur d'un assembly dynamique, à l'aide de EnumBuilder. L'exemple définit une énumération nommée Elevation, avec un type sous-jacent de Int32, et crée deux éléments : Low, avec une valeur égale à 0, et High, avec une valeur égale à 1. Une fois le type créé, l'assembly est enregistré avec le même TempAssembly.dll. Vous pouvez utiliser le MSIL Disassembler (Ildasm.exe) pour examiner le contenu de cet assembly.

Remarque :

Avant la version 2.0 du .NET Framework, cet exemple de code ne produit pas une énumération correcte.

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


public class Example
{
    public static void main(String[] args)
    {
        // Get the current application domain for the current thread.
        AppDomain currentDomain = AppDomain.get_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.get_Name(), aName.get_Name() + ".dll");

        // Define a public enumeration with the name "Elevation" and an 
        // underlying type of Integer.
        EnumBuilder eb = 
            mb.DefineEnum("Elevation", TypeAttributes.Public, int.class.ToType());

        // Define two members, "High" and "Low".
        eb.DefineLiteral("Low", (Int32) 0);
        eb.DefineLiteral("High", (Int32) 1);

        // Create the type and save the assembly.
        Type finished = eb.CreateType();
        ab.Save(aName.get_Name() + ".dll");

        Array values = Enum.GetValues(finished);
        for (int i = 0; i < values.get_Length(); i++)
        {
            Console.WriteLine("{0}.{1} = {2}", finished, 
                values.GetValue(i), (Int32)values.GetValue(i));
        }
    }
} 

/* This code example produces the following output:

Elevation.Low = 0
Elevation.High = 1 
 */


System.Object
  System.Reflection.MemberInfo
    System.Type
      System.Reflection.Emit.EnumBuilder
Tous les membres static (Shared en Visual Basic) publics de ce type sont thread-safe. Il n'est pas garanti que les membres d'instance soient thread-safe.

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professionnel Édition x64, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

Le .NET Framework et le .NET Compact Framework ne prennent pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.

.NET Framework

Pris en charge dans : 3.5, 3.0, 2.0, 1.1, 1.0
Cela vous a-t-il été utile ?
(1500 caractères restants)

Ajouts de la communauté

AJOUTER
© 2013 Microsoft. Tous droits réservés.