Partager via


Champs (Guide de programmation C#)

Mise à jour : novembre 2007

Un champ est une variable de tout type déclaré directement dans une classe ou un struct. Les champs sont des membres de leur type contenant.

Une classe ou un struct peut avoir des champs d'instance ou des champs statiques, ou les deux. Les champs d'instance sont spécifiques à une instance d'un type. Si vous avez une classe T avec un champ d'instance F, vous pouvez créer deux objets de type T et modifier la valeur de F dans chaque objet sans affecter la valeur dans l'autre objet. Par contraste, un champ statique appartient à la classe elle-même et est partagé par toutes les instances de cette classe. Les modifications effectuées à partir de l'instance A seront visibles immédiatement aux instances B et C si elles accèdent au champ.

En général, vous devez utiliser des champs uniquement pour des variables qui ont une accessibilité privée ou protégée. Les données que votre classe expose au code client doivent être fournies par le biais de méthodes, propriétés et indexeurs. En utilisant ces constructions pour l'accès indirect aux champs internes, vous pouvez vous protéger contre les valeurs d'entrée non valides. Un champ privé qui stocke les données exposées par une propriété publique porte le nom de magasin de stockage ou champ de stockage.

Les champs stockent en général les données qui doivent être accessibles à plusieurs méthodes de classe et qui doivent être stockées davantage que la durée de vie d'une méthode unique. Par exemple, une classe qui représente une date de calendrier peut avoir trois champs à nombre entier : un pour le mois, un pour le jour et un pour l'année. Les variables qui ne sont pas utilisées hors de la portée d'une méthode unique doivent être déclarées comme variables locales dans le corps de méthode lui-même.

Les champs sont déclarés dans le bloc de classe en spécifiant le niveau d'accès du champ, suivi du type du champ, suivi du nom du champ. Par exemple :

public class CalendarEntry
{
    // private field
    private DateTime date;

    // public field (Generally not recommended)
    public string day;

    // Public property exposes date field safely.
    public DateTime Date 
    {
        get 
        {
            return date;
        }
        set 
        {
            if(value.Year > 1980 || value.Year <= 2008)
            {
                date = value;
            }
            else
                throw new ArgumentOutOfRangeException();
        }

    }

    // Public method also exposes date field safely.
    public void SetDate(string dateString)
    {
        DateTime dt = Convert.ToDateTime(dateString);

        if (dt.Year > 1980 || dt.Year <= 2008)
        {
            date = dt;
        }
        else
            throw new ArgumentOutOfRangeException();            
    }

    public TimeSpan GetTimeSpan(string dateString)
    {
        DateTime dt = Convert.ToDateTime(dateString);

        if (dt != null && dt.Ticks < date.Ticks)
        {
            return date - dt;
        }
        else
            throw new ArgumentOutOfRangeException();  

    }
}

L'accès à un champ dans un objet se fait en ajoutant un point après le nom d'objet, suivi du nom du champ, comme dans objectname.fieldname. Par exemple :

CalendarEntry birthday = new CalendarEntry();
birthday.day = "Saturday";

Un champ peut se voir affecter une valeur initiale à l'aide de l'opérateur d'assignation dans la déclaration de champ. Par exemple, pour donner automatiquement au champ day la valeur "Monday", déclarez day comme dans l'exemple suivant :

public class CalendarDateWithInitialization
{
    public string day = "Monday";
    //...
}

Les champs sont initialisés immédiatement avant le constructeur pour l'instance d'objet appelée. Si le constructeur assigne la valeur d'un champ, il remplace toute valeur donnée au cours de la déclaration de champ. Pour plus d'informations, consultez Utilisation de constructeurs (Guide de programmation C#).

Remarque :

Un initialiseur de champ ne peut pas faire référence à d'autres champs d'instance.

Les champs peuvent être marqués comme étant publics, privés, protégés, internes ou protected internal. Ces modificateurs d'accès définissent comment les utilisateurs de la classe peuvent accéder aux champs. Pour plus d'informations, consultez Modificateurs d'accès (Guide de programmation C#).

Un champ peut être déclaré statique facultativement. Cela rend le champ disponible aux appelants à tout moment, même si aucune instance de la classe n'existe. Pour plus d'informations, consultez Classes statiques et membres de classe statique (Guide de programmation C#).

Un champ peut être déclaré en lecture seule. Un champ en lecture seule peut uniquement se voir assigner une valeur pendant l'initialisation ou dans un constructeur. Un champ staticreadonly est très semblable à une constante, à ceci près que le compilateur C# n'a pas accès à la valeur d'un champ statique en lecture seule au moment de la compilation, uniquement au moment de l'exécution. Pour plus d'informations, consultez Constantes (Guide de programmation C#).

Spécification du langage C#

Pour plus d'informations, consultez les sections suivantes dans Spécifications du langage C#.

  • 1.6.5 Champs

  • 10.5 Champs

Voir aussi

Concepts

Guide de programmation C#

Référence

Classes et structs (Guide de programmation C#)

Utilisation de constructeurs (Guide de programmation C#)

Héritage (Guide de programmation C#)

Modificateurs d'accès (Guide de programmation C#)

Classes abstract et sealed et membres de classe (Guide de programmation C#)