Condividi tramite


Proprietà implementate automaticamente

Le proprietà implementate automaticamente rendono la dichiarazione di proprietà più concisa quando non sono necessarie altre logiche 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.

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à supportate da campi e implementate automaticamente dichiarano un campo sottostante di un'istanza privata e le interfacce non possono dichiarare i campi dell'istanza. La dichiarazione di una proprietà in un'interfaccia senza definire un corpo dichiara una proprietà con funzioni di accesso. Ogni tipo che implementa tale interfaccia deve implementare tale proprietà.

È 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 i dati, spesso è necessario disporre di 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 funzione di accesso get (non modificabile ovunque tranne il costruttore).
  • Dichiarare una funzione di accesso get e una funzione di accesso init (non modificabile ovunque tranne durante la costruzione di oggetti).
  • Dichiarare la funzione di accesso set come privata (non modificabile ai consumer).

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

Potrebbe essere necessario aggiungere la convalida a una proprietà implementata automaticamente. C# 13 aggiunge le proprietà supportate dai campi come funzionalità di anteprima. Usare la field parola chiave per accedere al campo sottostante sintetizzato dal compilatore di una proprietà implementata automaticamente. Ad esempio, è possibile assicurarsi che la FirstName proprietà nell'esempio precedente non possa essere impostata su null o sulla stringa vuota:

public string FirstName 
{ 
    get; 
    set 
    { 
        field = (string.IsNullOrWhiteSpace(value) is false
            ? value
            : throw new ArgumentException(nameof(value), "First name can't be whitespace or null"));
    }
} = "Jane";

Questa funzionalità consente di aggiungere logica alle funzioni di accesso senza che sia necessario dichiarare in modo esplicito il campo sottostante. Usare la field parola chiave per accedere al campo sottostante generato dal compilatore.

Importante

La field parola chiave è una funzionalità di anteprima in C# 13. È necessario usare .NET 9 e impostare l'elemento <LangVersion> su preview nel file di progetto per usare la field parola chiave contestuale.

È consigliabile prestare attenzione usando la funzionalità parola field chiave in una classe con un campo denominato field. La nuova field parola chiave ombreggiate un campo denominato field nell'ambito di una funzione di accesso alle proprietà. È possibile modificare il nome della field variabile oppure usare il @ token per fare riferimento all'identificatore field come @field. Per altre informazioni, leggere la specifica della funzionalità per la field parola chiave .

Vedi anche