Propriétés implémentées automatiquement (Guide de programmation C#)

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é. Elles permettent également au code client de créer des objets. 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é. Les accesseurs init peuvent également être déclarés en tant que propriétés implémentées automatiquement.

Exemple

L'exemple suivant montre une classe simple qui a des propriétés implémentées automatiquement :

// This class is mutable. Its data can be modified from
// outside the class.
public class Customer
{
    // Auto-implemented 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()
    {
        // Initialize a new object.
        Customer cust1 = new Customer(4987.63, "Northwind", 90108);

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

Vous ne pouvez pas déclarer les propriétés implémentées automatiquement dans les interfaces. Les propriétés implémentées automatiquement déclarent un champ de stockage d’instance privée et les interfaces peuvent ne pas déclarer de champs d’instance. La déclaration d’une propriété dans une interface sans définir de corps déclare une propriété avec des accesseurs qui doivent être implémentés par chaque type qui implémente cette interface.

Vous pouvez initialiser des propriétés implémentées automatiquement de la même façon que des champs :

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

La classe qui est illustrée dans l'exemple précédent est mutable. Le code client peut modifier les valeurs dans les objets après leur création. 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. Toutefois, pour les petites classes ou petits structs qui encapsulent simplement un ensemble de valeurs (données) et qui ont peu ou pas de comportements, vous devez utiliser l’une des options suivantes pour rendre les objets immuables :

  • Déclarez uniquement un accesseur get (immuable partout, à l’exception du constructeur).
  • Déclarez un accesseur get et un accesseur init (immuable partout, sauf pendant la construction de l’objet).
  • Déclarez l’accesseur set comme privé (immuable pour les consommateurs).

Pour plus d’informations, consultez Comment implémenter une classe légère avec des propriétés implémentées automatiquement (Guide de programmation C#).

Voir aussi