Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Automaticky implementované vlastnosti usnadňují deklaraci vlastností, pokud se v přístupových objektech vlastností nevyžaduje žádná jiná logika. Umožňují také klientskému kódu vytvářet objekty. Když deklarujete vlastnost, jak je znázorněno v následujícím příkladu, kompilátor vytvoří privátní anonymní backingové pole, ke kterému lze přistupovat pouze prostřednictvím vlastností get a set přístupových objektů.
init Přístupové objekty lze také deklarovat jako automaticky implementované vlastnosti.
Následující příklad ukazuje jednoduchou třídu, která má některé automaticky implementované vlastnosti:
// 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;
}
}
V rozhraních nemůžete deklarovat automaticky implementované vlastnosti. Automaticky implementované vlastnosti a vlastnosti zálohované privátní instance deklarují pole a rozhraní nemohou deklarovat pole instance. Deklarování vlastnosti v rozhraní bez definování těla deklaruje vlastnost s příslušenstvím. Každý typ, který implementuje toto rozhraní, musí implementovat tuto vlastnost.
Automaticky implementované vlastnosti můžete inicializovat podobně jako pole:
public string FirstName { get; set; } = "Jane";
Třída zobrazená v předchozím příkladu je proměnlivá. Klientský kód může po vytvoření změnit hodnoty v objektech. Ve složitých třídách, které obsahují významné chování (metody) a data, je často nutné mít veřejné vlastnosti. U malých tříd nebo struktur, které pouze zapouzdřují sadu hodnot (dat) a mají malé nebo žádné chování, byste měli použít jednu z následujících možností, aby objekty byly neměnné:
- Deklarujte pouze přístupový objekt
get(neměnný všude kromě konstruktoru). - Deklarujte
getpříslušenství ainitpříslušenství (neměnné všude kromě vytváření objektů). - Deklarujte
setpřístup jako soukromý (neměnný pro uživatele).
Další informace naleznete v tématu Jak implementovat odlehčenou třídu s automaticky implementovanými vlastnostmi.
Možná budete muset přidat ověření do automaticky implementované vlastnosti. C# 14 přidá vlastnosti založené na polích. Klíčové slovo použijete field pro přístup k syntetizovanému poli kompilátoru backingu automaticky implementované vlastnosti. Můžete například zajistit, aby FirstName vlastnost v předchozím příkladu nebyla nastavena na null prázdný řetězec ani na tento prázdný řetězec:
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";
Tato funkce umožňuje přidat logiku do přístupových objektů, aniž byste museli explicitně deklarovat backingové pole. Klíčové slovo použijete field pro přístup k backingu pole vygenerovaném kompilátorem.