Partager via


Comment : déclarer et utiliser des propriétés en lecture/écriture (Guide de programmation C#)

Mise à jour : novembre 2007

Les propriétés offrent la commodité des données membres publiques sans les risques liés à un accès non protégé, non contrôlé et non vérifié aux données d'un objet. Cela se fait au moyen des accesseurs : méthodes spéciales qui assignent et récupèrent des valeurs de la donnée membre sous-jacente. L'accesseur set permet aux données membre d'être assignées, et l'accesseur get récupère des valeurs de donnée membre.

Cet exemple présente une classe Person qui possède deux propriétés : Name (chaîne) et Age (entier). Les deux propriétés fournissant des accesseurs get et set, elles sont considérées comme des propriétés en lecture/écriture.

Exemple

class Person
{
    private string name = "N/A";
    private int age = 0;

    // Declare a Name property of type string:
    public string Name
    {
        get
        {
            return name;
        }
        set
        {
            name = value;
        }
    }

    // Declare an Age property of type int:
    public int Age
    {
        get
        {
            return age;
        }

        set
        {
            age = value;
        }
    }

    public override string ToString()
    {
        return "Name = " + Name + ", Age = " + Age;
    }
}

class TestPerson
{
    static void Main()
    {
        // Create a new Person object:
        Person person = new Person();

        // Print out the name and the age associated with the person:
        Console.WriteLine("Person details - {0}", person);

        // Set some values on the person object:
        person.Name = "Joe";
        person.Age = 99;
        Console.WriteLine("Person details - {0}", person);

        // Increment the Age property:
        person.Age += 1;
        Console.WriteLine("Person details - {0}", person);

        // Keep the console window open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
}
/* Output:
    Person details - Name = N/A, Age = 0
    Person details - Name = Joe, Age = 99
    Person details - Name = Joe, Age = 100
*/

Programmation fiable

Dans l'exemple précédent, les propriétés Name et Age sont publiques et incluent un accesseur get et un accesseur set. Cela permet à n'importe quel objet de lire et d'écrire ces propriétés. Toutefois, il est quelquefois souhaitable d'exclure l'un des accesseurs. L'omission de l'accesseur set, par exemple, rend la propriété en lecture seule :

public string Name
{
    get
    {
        return name;
    }
}

Vous pouvez également exposer publiquement un accesseur mais rendre l'autre privé ou protégé. Pour plus d'informations, consultez Accessibilité de l'accesseur asymétrique.

Une fois les propriétés déclarées, vous pouvez les utiliser comme s'il s'agissait de champs de la classe. Il est ainsi possible d'employer une syntaxe très naturelle pour obtenir ou définir la valeur d'une propriété, comme dans les instructions suivantes :

person.Name = "Joe";
person.Age = 99;

Notez qu'une variable value spéciale est disponible dans la méthode set d'une propriété. Cette variable contient la valeur que l'utilisateur a spécifiée, par exemple :

name = value;

Notez la syntaxe correcte pour incrémenter la propriété Age sur un objet Person :

person.Age += 1;

Si des méthodes set et get distinctes ont été employées pour modeler les propriétés, le code équivalent peut avoir la forme suivante :

person.SetAge(person.GetAge() + 1); 

La méthode ToString est substituée dans cet exemple :

public override string ToString()
{
    return "Name = " + Name + ", Age = " + Age;
}

Vous pouvez remarquer que ToString n'est pas utilisée de façon explicite dans le programme. Elle est appelée par défaut par les appels WriteLine.

Voir aussi

Concepts

Guide de programmation C#

Référence

Propriétés (Guide de programmation C#)

Classes et structs (Guide de programmation C#)