Proprietà implementate automaticamente (Guida per programmatori C#)

Le proprietà implementate automaticamente rendono la dichiarazione di proprietà più concisa quando non è necessaria alcuna logica aggiuntiva nelle funzioni di accesso alle proprietà. Consentono inoltre al codice client di creare oggetti. Quando si dichiara una proprietà come mostrato nel seguente esempio, il compilatore crea un campo sottostante privato anonimo accessibile solo tramite le funzioni di accesso get e set della proprietà. init le funzioni di accesso possono anche essere dichiarate come proprietà implementate automaticamente.

Esempio

L'esempio seguente mostra una classe semplice con alcune proprietà implementate automaticamente:

// 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;
    }
}

Non è possibile dichiarare le proprietà implementate automaticamente nelle interfacce. Le proprietà implementate automaticamente dichiarano un campo sottostante di un'istanza privata e le interfacce potrebbero non dichiarare campi di istanza. La dichiarazione di una proprietà in un'interfaccia senza definire un corpo dichiara una proprietà con funzioni di accesso che devono essere implementate da ogni tipo che implementa tale interfaccia.

È possibile inizializzare le proprietà implementate automaticamente in modo analogo ai campi:

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

La classe mostrata nell'esempio precedente è modificabile. Il codice client può modificare i valori negli oggetti dopo la creazione. Nelle classi complesse che contengono un comportamento significativo (metodi) e dati, è spesso necessario avere proprietà pubbliche. Tuttavia, per classi o struct di piccole dimensioni che incapsulano semplicemente un set di valori (dati) e presentano comportamenti minimi o nulli, è consigliabile usare una delle opzioni seguenti per rendere gli oggetti non modificabili:

  • Dichiarare solo una get funzione di accesso (non modificabile ovunque tranne il costruttore).
  • Dichiarare una get funzione di accesso e una init funzione di accesso (non modificabile ovunque tranne durante la costruzione di oggetti).
  • Dichiarare la set funzione di accesso come privata (non modificabile ai consumer).

Per altre informazioni, vedere Come implementare una classe leggera con proprietà implementate automaticamente.

Vedi anche