Właściwości zaimplementowane automatycznie (Przewodnik programowania w języku C#)

Właściwości implementowane automatycznie sprawiają, że deklaracja właściwości jest bardziej zwięzła, gdy w metodzie dostępu właściwości nie jest wymagana żadna dodatkowa logika. Umożliwiają one również kodowi klienta tworzenie obiektów. Po zadeklarowaniu właściwości, jak pokazano w poniższym przykładzie, kompilator tworzy prywatne, anonimowe pole zapasowe, do którego można uzyskać dostęp tylko za pośrednictwem właściwości get i set metod dostępu. init metody dostępu można również zadeklarować jako właściwości implementowane automatycznie.

Przykład

W poniższym przykładzie przedstawiono prostą klasę, która ma pewne właściwości zaimplementowane automatycznie:

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

Nie można zadeklarować automatycznie zaimplementowanych właściwości w interfejsach. Automatycznie zaimplementowane właściwości deklarują pole zaplecza wystąpienia prywatnego, a interfejsy mogą nie deklarować pól wystąpienia. Deklarowanie właściwości w interfejsie bez definiowania treści deklaruje właściwość z metodami dostępu, które muszą być implementowane przez każdy typ, który implementuje ten interfejs.

Możesz zainicjować automatycznie zaimplementowane właściwości podobne do pól:

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

Klasa pokazana w poprzednim przykładzie jest modyfikowalna. Kod klienta może zmienić wartości w obiektach po utworzeniu. W złożonych klasach, które zawierają znaczące zachowanie (metody), a także dane, często konieczne jest posiadanie właściwości publicznych. Jednak w przypadku małych klas lub struktur, które po prostu hermetyzują zestaw wartości (danych) i mają niewielkie lub żadne zachowania, należy użyć jednej z następujących opcji, aby obiekty stały się niezmienne:

  • Zadeklaruj tylko metodę get dostępu (niezmienną wszędzie z wyjątkiem konstruktora).
  • Zadeklaruj init metodę get dostępu i akcesorium (niezmienne wszędzie z wyjątkiem podczas budowy obiektu).
  • Zadeklaruj metodę dostępu jako prywatną set (niezmienną dla konsumentów).

Aby uzyskać więcej informacji, zobacz Jak zaimplementować lekką klasę z automatycznie zaimplementowanymi właściwościami.

Zobacz też