0 sur 1 ont trouvé cela utile - Évaluez ce sujet

Enum, structure

Fournit la classe de base pour les énumérations.

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

[SerializableAttribute] 
[ComVisibleAttribute(true)] 
public abstract class Enum : ValueType, IComparable, IFormattable, IConvertible
/** @attribute SerializableAttribute() */ 
/** @attribute ComVisibleAttribute(true) */ 
public abstract class Enum extends ValueType implements IComparable, IFormattable, 
	IConvertible
SerializableAttribute 
ComVisibleAttribute(true) 
public abstract class Enum extends ValueType implements IComparable, IFormattable, 
	IConvertible

Une énumération est une constante nommée dont le type sous-jacent peut être n'importe quel type entier à l'exception de Char. Si aucun type sous-jacent n'est explicitement déclaré, Int32 est utilisé. Les langages de programmation fournissent généralement la syntaxe permettant de déclarer une énumération composée de constantes nommées et de leurs valeurs.

Enum fournit les méthodes permettant de comparer les instances de cette classe, de convertir la valeur d'une instance en représentation sous forme de chaîne, de convertir la représentation sous forme de chaîne d'un nombre en une instance de cette classe et de créer une instance d'une énumération et d'une valeur spécifiées.

Vous pouvez aussi considérer une énumération comme un champ de bits. Pour plus d'informations, consultez FlagsAttribute.

Interfaces implémentées

Cette classe hérite de ValueType et implémente les interfaces IComparable, IFormattable et IConvertible. Pour les conversions, utilisez la classe Convert au lieu de l'implémentation du membre d'interface explicite de IConvertible de cette classe.

Indications concernant FlagsAttribute et Enum

  • Utilisez uniquement l'attribut personnalisé FlagsAttribute pour une énumération si une opération de bits (AND, OR, EXCLUSIVE OR) doit être exécutée sur une valeur numérique.

  • Définissez des constantes d'énumération à la puissance deux, soit 1, 2, 4, 8, et ainsi de suite. Cela signifie que les indicateurs individuels inclus dans des constantes d'énumération combinées ne se chevauchent pas.

  • Examinons la création d'une constante énumérée pour des combinaisons d'indicateurs couramment utilisées. Par exemple, si une énumération utilisée pour les opérations d'E/S de fichier contient les constantes énumérées Read = 1 et Write = 2, créez la constante énumérée ReadWrite = Read OR Write qui associe les indicateurs Read et Write. De plus, l'opération de bits OR utilisée pour combiner les indicateurs peut être considérée comme un concept avancé dans un contexte qui ne concerne pas les tâches simples.

  • Soyez prudent si vous définissez un nombre négatif comme constante énumérée d'indicateur, car la valeur 1 est souvent affectée aux positions d'indicateur, ce qui peut être source de confusion dans votre code, voire d'erreurs de codage.

  • Pour savoir si un indicateur a une valeur numérique, il suffit d'effectuer une opération de bits AND entre la valeur numérique et la constante énumérée d'indicateur qui affecte à tous les bits la valeur numérique zéro ne correspondant pas à l'indicateur, puis de tester si le résultat de cette opération est égal à la constante énumérée d'indicateur.

  • Utilisez None comme nom de la constante énumérée d'indicateur dont la valeur est nulle. Vous ne pouvez pas utiliser la constante énumérée None dans une opération de bits AND pour tester un indicateur, car le résultat est toujours nul. Toutefois, vous pouvez effectuer une comparaison logique (pas une comparaison de bits) entre la valeur numérique et la constante énumérée None pour déterminer si des bits de la valeur numérique sont définis.

    Si vous créez une énumération de valeurs au lieu d'une énumération d'indicateurs, il peut être utile de créer une constante énumérée None. En effet, par défaut, la mémoire utilisée pour l'énumération est initialisée à zéro par le Common Language Runtime. Par conséquent, si vous n'affectez pas la valeur null à une constante, l'énumération contiendra une valeur non valide lorsqu'elle sera créée.

    Si votre application doit représenter un cas par défaut évident, utilisez une constante énumérée dont la valeur est nulle pour représenter la valeur par défaut. S'il n'y a aucun cas par défaut, utilisez plutôt une constante énumérée dont la valeur est nulle, c'est-à-dire le cas qui n'est représenté par aucune autre constante énumérée.

  • Ne définissez pas uniquement une valeur d'énumération pour refléter l'état de l'énumération elle-même. Par exemple, ne définissez pas une constante énumérée qui marque simplement la fin de l'énumération. Si vous devez déterminer la dernière valeur de l'énumération, vérifiez explicitement cette valeur. De plus, vous pouvez exécuter un contrôle de plage pour la première et dernière constante énumérée si toutes les valeurs dans la plage sont valides.

  • Ne spécifiez pas de constantes énumérées en vue d'une utilisation future.

  • Lorsque vous définissez une méthode ou une propriété qui utilise une constante énumérée comme une valeur, pensez à valider la valeur. En effet, vous pouvez caster une valeur numérique en type énumération, même si cette valeur numérique n'est pas définie dans l'énumération.

L'exemple de code suivant illustre l'utilisation d'une énumération pour représenter des valeurs nommées et d'une autre énumération pour représenter des champs de bits nommés.

using System;

public class EnumTest {
    enum Days { Saturday, Sunday, Monday, Tuesday, Wednesday, Thursday, Friday };
    enum BoilingPoints { Celcius = 100, Fahrenheit = 212 };
    [FlagsAttribute]
    enum Colors { Red = 1, Green = 2, Blue = 4, Yellow = 8 };

    public static void Main() {

        Type weekdays = typeof(Days);
        Type boiling = typeof(BoilingPoints);

        Console.WriteLine("The days of the week, and their corresponding values in the Days Enum are:");

        foreach ( string s in Enum.GetNames(weekdays) )
            Console.WriteLine( "{0,-11}= {1}", s, Enum.Format( weekdays, Enum.Parse(weekdays, s), "d"));

        Console.WriteLine();
        Console.WriteLine("Enums can also be created which have values that represent some meaningful amount.");
        Console.WriteLine("The BoilingPoints Enum defines the following items, and corresponding values:");

        foreach ( string s in Enum.GetNames(boiling) )
            Console.WriteLine( "{0,-11}= {1}", s, Enum.Format(boiling, Enum.Parse(boiling, s), "d"));

        Colors myColors = Colors.Red | Colors.Blue | Colors.Yellow;
        Console.WriteLine();
        Console.WriteLine("myColors holds a combination of colors. Namely: {0}", myColors);
    }
}

import System.*;

public class EnumTest
{
    enum Days
    {
        saturday (0),
        sunday (1),
        monday (2),
        tuesday (3),
        wednesday (4),
        thursday (5),
        friday (6);
    } //Days

    enum BoilingPoints
    {
        celsius (100),
        fahrenheit (212);
    } //BoilingPoints

    /** @attribute FlagsAttribute()
     */
    enum Colors
    {
        red (1),
        green (2),
        blue (4),
        yellow (8);
    } //Colors

    public static void main(String[] args)
    {
        Type weekdays = Days.class.ToType();
        Type boiling = BoilingPoints.class.ToType();

        Console.WriteLine("The days of the week, and their corresponding"
            + " values in the Days Enum are:");
        String s[] = Enum.GetNames(weekdays);
        for (int iCtr = 0; iCtr < s.length; iCtr++) {
            Console.WriteLine("{0,-11}= {1}", s[iCtr],
                Enum.Format(weekdays, Enum.Parse(weekdays, s[iCtr]), "d"));
        }

        Console.WriteLine();
        Console.WriteLine("Enums can also be created which have values that"
            + " represent some meaningful amount.");
        Console.WriteLine("The BoilingPoints Enum defines the following items,"
            + " and corresponding values:");
        String s1[] = Enum.GetNames(boiling);
        for (int iCtr = 0; iCtr < s1.length; iCtr++) {
            Console.WriteLine("{0,-11}= {1}", s1[iCtr], 
                Enum.Format(boiling, Enum.Parse(boiling, s1[iCtr]), "d"));
        }
        Colors myColors = Colors.red | Colors.blue | Colors.yellow;
        Console.WriteLine();
        Console.WriteLine("myColors holds a combination of colors. Namely: {0}",
            myColors);
    } //main
} //EnumTest

import System;

public class EnumTest {
    enum Days { Saturday, Sunday, Monday, Tuesday, Wednesday, Thursday, Friday };
    enum BoilingPoints { Celcius = 100, Fahrenheit = 212 };
    FlagsAttribute
    enum Colors { Red = 1, Green = 2, Blue = 4, Yellow = 8 };

    public static function Main() {

        var weekdays : Type = Days;
        var boiling : Type = BoilingPoints;

        Console.WriteLine("The days of the week, and their corresponding values in the Days Enum are:");

        for( var i : int in Enum.GetNames(weekdays) )
            Console.WriteLine( "{0,-11}= {1}", Enum.GetNames(weekdays).GetValue(i), 
			Enum.Format( weekdays, Enum.Parse(weekdays, Enum.GetNames(weekdays).GetValue(i)), "d"));

        Console.WriteLine();
        Console.WriteLine("Enums can also be created which have values that represent some meaningful amount.");
        Console.WriteLine("The BoilingPoints Enum defines the following items, and corresponding values:");

        for ( var j : int in Enum.GetNames(boiling) )
            Console.WriteLine( "{0,-11}= {1}", Enum.GetNames(boiling).GetValue(j), 
			Enum.Format(boiling, Enum.Parse(boiling, Enum.GetNames(boiling).GetValue(j)), "d"));

        var myColors : Colors = Colors.Red | Colors.Blue | Colors.Yellow;
        Console.WriteLine();
        Console.WriteLine("myColors holds a combination of colors. Namely: {0}", myColors);
    }
}

Ce type est sécurisé pour les opérations multithread.

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile pour Pocket PC, Windows Mobile pour Smartphone, Windows Server 2003, Windows XP Édition Media Center, Windows XP Professionnel Édition x64, Windows XP SP2, Windows XP Starter Edition

Le .NET Framework ne prend pas en charge toutes les versions de chaque plate-forme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise.

.NET Framework

Prise en charge dans : 2.0, 1.1, 1.0

.NET Compact Framework

Prise en charge dans : 2.0, 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.