Propriétés implémentées automatiquement (Guide de programmation C#)Auto-Implemented Properties (C# Programming Guide)

En C# 3.0 et versions ultérieures, les propriétés implémentées automatiquement rendent la déclaration de propriété plus concise quand aucune logique supplémentaire n’est requise dans les accesseurs de propriété.In C# 3.0 and later, auto-implemented properties make property-declaration more concise when no additional logic is required in the property accessors. Elles permettent également au code client de créer des objets.They also enable client code to create objects. Quand vous déclarez une propriété comme indiqué dans l'exemple suivant, le compilateur crée un champ de stockage privé et anonyme uniquement accessible via les accesseurs get et set de la propriété.When you declare a property as shown in the following example, the compiler creates a private, anonymous backing field that can only be accessed through the property's get and set accessors.

ExempleExample

L'exemple suivant montre une classe simple qui a des propriétés implémentées automatiquement :The following example shows a simple class that has some auto-implemented properties:


// This class is mutable. Its data can be modified from
// outside the class.
class Customer
{
    // Auto-Impl Properties for trivial get and set
    public double TotalPurchases { get; set; }
    public string Name { get; set; }
    public int CustomerID { get; set; }

    // Constructor
    public Customer(double purchases, string name, int ID)
    {
        TotalPurchases = purchases;
        Name = name;
        CustomerID = ID;
    }
    // Methods
    public string GetContactInfo() {return "ContactInfo";}
    public string GetTransactionHistory() {return "History";}

    // .. Additional methods, events, etc.
}

class Program
{
    static void Main()
    {
        // Intialize a new object.
        Customer cust1 = new Customer ( 4987.63, "Northwind",90108 );

        //Modify a property
        cust1.TotalPurchases += 499.99;
    }
}

En C# 6 et versions ultérieures, vous pouvez initialiser des propriétés implémentées automatiquement de la même façon que des champs :In C# 6 and later, you can initialize auto-implemented properties similarly to fields:

public string FirstName { get; set; } = "Jane";  

La classe qui est illustrée dans l'exemple précédent est mutable.The class that is shown in the previous example is mutable. Le code client peut modifier les valeurs dans les objets après leur création.Client code can change the values in objects after they are created. Dans les classes complexes qui contiennent un comportement significatif (méthodes) ainsi que des données, il est souvent nécessaire d'avoir des propriétés publiques.In complex classes that contain significant behavior (methods) as well as data, it is often necessary to have public properties. Toutefois, pour les petites classes ou les petits structs qui encapsulent simplement un ensemble de valeurs (données) et qui ont peu de comportements ou aucun, vous devez rendre les objets immuables en déclarant l’accesseur set comme étant privé (immuables pour les consommateurs) ou en déclarant uniquement un accesseur get (immuables partout sauf dans le constructeur).However, for small classes or structs that just encapsulate a set of values (data) and have little or no behaviors, you should either make the objects immutable by declaring the set accessor as private (immutable to consumers) or by declaring only a get accessor (immutable everywhere except the constructor). Pour plus d’informations, consultez Guide pratique pour implémenter une classe Lightweight avec des propriétés implémentées automatiquement.For more information, see How to: Implement a Lightweight Class with Auto-Implemented Properties.

Les attributs sont autorisés sur les propriétés implémentées automatiquement, mais évidemment pas sur les champs de stockage puisque ces derniers ne sont pas accessibles à partir de votre code source.Attributes are permitted on auto-implemented properties but obviously not on the backing fields since those are not accessible from your source code. Si vous devez utiliser un attribut sur le champ de stockage d'une propriété, créez simplement une propriété normale.If you must use an attribute on the backing field of a property, just create a regular property.

Voir aussiSee Also

PropriétésProperties
ModificateursModifiers