Właściwości zaimplementowane automatycznie (Przewodnik programowania w języku C#)
Automatycznie zaimplementowane właściwości 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 inna 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 nie mogą 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) i 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.