Megosztás a következőn keresztül:


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ékot init (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 fieldegy 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.

Lásd még