Automatiskt implementerade egenskaper (C#-programmeringsguide)

Automatiskt implementerade egenskaper gör egenskapsdeklarationen mer koncis när ingen ytterligare logik krävs i egenskapsåtkomsterna. De aktiverar även klientkod för att skapa objekt. När du deklarerar en egenskap enligt följande exempel skapar kompilatorn ett privat, anonymt säkerhetskopieringsfält som bara kan nås via egenskapens get och set åtkomstgivarna. init accessorer kan också deklareras som automatiskt implementerade egenskaper.

Exempel

I följande exempel visas en enkel klass som har vissa automatiskt implementerade egenskaper:

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

Du kan inte deklarera automatiskt implementerade egenskaper i gränssnitt. Automatiskt implementerade egenskaper deklarerar ett säkerhetskopieringsfält för privata instanser och gränssnitten kanske inte deklarerar instansfält. Om du deklarerar en egenskap i ett gränssnitt utan att definiera en brödtext deklareras en egenskap med accessorer som måste implementeras av varje typ som implementerar gränssnittet.

Du kan initiera automatiskt implementerade egenskaper på liknande sätt som fält:

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

Klassen som visas i föregående exempel kan ändras. Klientkoden kan ändra värdena i objekt när de har skapats. I komplexa klasser som innehåller betydande beteende (metoder) samt data är det ofta nödvändigt att ha offentliga egenskaper. Men för små klasser eller structs som bara kapslar in en uppsättning värden (data) och har små eller inga beteenden bör du använda något av följande alternativ för att göra objekten oföränderliga:

  • Deklarera endast en get accessor (oföränderlig överallt utom konstruktorn).
  • Deklarera en get accessor och en init accessor (oföränderlig överallt utom under objektkonstruktion).
  • set Deklarera accessorn som privat (oföränderlig för konsumenter).

Mer information finns i Så här implementerar du en lättviktsklass med automatiskt implementerade egenskaper.

Se även