Automatikusan implementált tulajdonságok
Az automatikusan implementált tulajdonságok tömörebbé teszik a tulajdonságdeklarációt, ha a tulajdonság tartozékaiban nincs szükség más logikára. Emellett engedélyezik az ügyfélkódok létrehozását is. Amikor a következő példában látható módon deklarál egy tulajdonságot, a fordító létrehoz egy privát, névtelen háttérmezőt, amely csak a tulajdonság get
és set
a tartozékai segítségével érhető el. init
a tartozékok automatikusan implementált tulajdonságokként is deklarálhatók.
Az alábbi példa egy egyszerű osztályt mutat be, amely automatikusan implementált tulajdonságokkal rendelkezik:
// 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;
}
}
A felületeken nem deklarálhatja az automatikusan implementált tulajdonságokat. Az automatikusan implementált és mezőháttér által támogatott tulajdonságok privát példányok háttérmezőit deklarálják, az interfészek pedig nem deklarálhatnak példánymezőket. Ha egy tulajdonságot egy felületen deklarál egy törzs definiálása nélkül, az a tartozékokkal együtt deklarál egy tulajdonságot. Az interfészt megvalósító összes típusnak implementálnia kell ezt a tulajdonságot.
A mezőkhöz hasonlóan inicializálhatja az automatikusan implementált tulajdonságokat:
public string FirstName { get; set; } = "Jane";
Az előző példában látható osztály nem módosítható. Az ügyfélkód a létrehozás után módosíthatja az objektumok értékeit. A jelentős viselkedést (metódusokat) és adatokat tartalmazó összetett osztályokban gyakran szükség van nyilvános tulajdonságokra. Az olyan kis osztályok vagy szerkezetek esetében azonban, amelyek csak egy értékhalmazt (adatot) foglalnak össze, és kevés vagy semmilyen viselkedéssel nem rendelkeznek, az objektumok nem módosíthatóvá tételéhez használja az alábbi lehetőségek egyikét:
- Deklaráljon csak egy tartozékot
get
(a konstruktor kivételével mindenhol módosítható). - Deklaráljon egy tartozékot
get
és egy tartozékotinit
(nem módosítható mindenhol, kivéve az objektumépítés során). - Deklarálja a tartozékot
set
magánjellegűként (a fogyasztók számára nem módosítható).
További információ: Hogyan implementálhat egy egyszerűsített osztályt automatikusan implementált tulajdonságokkal.
Előfordulhat, hogy érvényesítést kell hozzáadnia egy automatikusan implementált tulajdonsághoz. A C# 13 előzetes verziójú funkcióként hozzáadja a mező által támogatott tulajdonságokat . A kulcsszóval field
elérheti az automatikusan implementált tulajdonság fordítószintizált háttérmezőjének elérését. Például meggyőződhet arról, hogy az FirstName
előző példában szereplő tulajdonság nem állítható be null
vagy az üres sztring:
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";
Ez a funkció lehetővé teszi, hogy logikát adjon hozzá a tartozékokhoz anélkül, hogy explicit módon deklarálnia kellene a háttérmezőt. A kulcsszóval field
elérheti a fordító által létrehozott háttérmezőt.
Fontos
A field
kulcsszó egy előzetes verziójú funkció a C# 13-ban. A környezetfüggő kulcsszó használatához a .NET 9-et kell használnia, és be kell állítania <LangVersion>
az elemet preview
a field
projektfájlban.
Körültekintően használja a field
kulcsszó funkciót egy olyan osztályban, amelynek neve field
egy mező. Az új field
kulcsszó árnyékot ad egy tulajdonság-tartozék hatókörében elnevezett field
mezőnek. Módosíthatja field
a változó nevét, vagy a @
jogkivonat használatával hivatkozhat az field
azonosítóra @field
. További információkért olvassa el a kulcsszó funkciós specifikációjátfield
.