Propriétés implémentées automatiquement
Les propriétés implémentées automatiquement rendent la déclaration de propriété plus concise lorsqu’aucune autre logique n’est requise dans les accesseurs de propriétés. 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é. init
les accesseurs 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 automatiquement les propriétés implémentées dans les interfaces. Les propriétés implémentées automatiquement déclarent un champ de stockage d’instance privée, et les interfaces ne peuvent 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 automatiquement les propriétés implémentées de la même façon que les 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) et 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 accesseurinit
(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.