Jak deklarovat a používat vlastnosti čtení zápisu (Průvodce programováním v C#)
Článek
Vlastnosti poskytují pohodlí veřejných datových členů bez rizik, která jsou součástí nechráněných, nekontrolovaných a neověřených přístupů k datům objektu. Vlastnosti deklarují přístupové objekty: speciální metody, které přiřazují a načítají hodnoty z podkladového datového členu. Přístupové objekty sady umožňují přiřazovat datové členy a getaccessor načítá hodnoty datového členu.
Tato ukázka ukazuje Person třídu, která má dvě vlastnosti: Name (řetězec) a Age (int). Obě vlastnosti poskytují get i set přístupové objekty, takže se považují za vlastnosti pro čtení a zápis.
Příklad
class Person
{
private string _name = "N/A";
private int _age = 0;
// Declare a Name property of type string:
public string Name
{
get
{
return _name;
}
set
{
_name = value;
}
}
// Declare an Age property of type int:
public int Age
{
get
{
return _age;
}
set
{
_age = value;
}
}
public override string ToString()
{
return "Name = " + Name + ", Age = " + Age;
}
}
public class Wrapper
{
private string _name = "N/A";
public string Name
{
get
{
return _name;
}
private set
{
_name = value;
}
}
}
class TestPerson
{
static void Main()
{
// Create a new Person object:
Person person = new Person();
// Print out the name and the age associated with the person:
Console.WriteLine("Person details - {0}", person);
// Set some values on the person object:
person.Name = "Joe";
person.Age = 99;
Console.WriteLine("Person details - {0}", person);
// Increment the Age property:
person.Age += 1;
Console.WriteLine("Person details - {0}", person);
// Keep the console window open in debug mode.
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
}
/* Output:
Person details - Name = N/A, Age = 0
Person details - Name = Joe, Age = 99
Person details - Name = Joe, Age = 100
*/
Robustní programování
V předchozím příkladu jsou vlastnosti Name veřejné a Age zahrnují přístupové objekty get i přístupové objektyset. Veřejné přístupové objekty umožňují každému objektu číst a zapisovat tyto vlastnosti. Někdy je však žádoucí vyloučit jeden z přístupových objektů. Přístupové objekty můžete vynechat set , aby byla vlastnost jen pro čtení:
public string Name
{
get
{
return _name;
}
private set
{
_name = value;
}
}
Alternativně můžete zveřejnit jeden přístup veřejně, ale nastavit druhý soukromý nebo chráněný. Další informace najdete v tématu Přístupnost asymetrického přístupového objektu.
Jakmile jsou vlastnosti deklarovány, lze je použít jako pole třídy. Vlastnosti umožňují při získávání a nastavení hodnoty vlastnosti přirozenou syntaxi, jako v následujících příkazech:
person.Name = "Joe";
person.Age = 99;
V metodě vlastnosti set je k dispozici speciální value proměnná. Tato proměnná obsahuje hodnotu, kterou uživatel zadal, například:
_name = value;
Všimněte si čisté syntaxe pro zvýšení vlastnosti objektu AgePerson :
person.Age += 1;
Pokud se k modelování vlastností použily samostatné set metody a get metody, může ekvivalentní kód vypadat takto:
person.SetAge(person.GetAge() + 1);
Metoda ToString je přepsána v tomto příkladu:
public override string ToString()
{
return "Name = " + Name + ", Age = " + Age;
}
Všimněte si, že ToString se v programu explicitně nepoužívá. Ve výchozím nastavení se volá voláním WriteLine .
Zdroj tohoto obsahu najdete na GitHubu, kde můžete také vytvářet a kontrolovat problémy a žádosti o přijetí změn. Další informace najdete v našem průvodci pro přispěvatele.
Zpětná vazba k produktu .NET
.NET je open source projekt. Vyberte odkaz pro poskytnutí zpětné vazby:
Learn how to implement read-write, read-only, and write-only class properties using property accessors and access modifiers, and how to implement methods and extension methods for a class.