Jak deklarować i używać właściwości zapisu odczytu (Przewodnik programowania w języku C#)
Właściwości zapewniają wygodę elementów członkowskich danych publicznych bez ryzyka, które są chronione, niekontrolowane i niezweryfikowane dostęp do danych obiektu. Właściwości deklarują metody dostępu: specjalne metody, które przypisują i pobierają wartości z bazowego elementu członkowskiego danych. Zestaw dostępu umożliwia przypisanie elementów członkowskich danych, a metodę pobieraniapobiera wartości składowych danych.
W tym przykładzie przedstawiono klasę Person
, która ma dwie właściwości: Name
(ciąg) i Age
(int). Obie właściwości zapewniają get
i set
metody dostępu, więc są traktowane jako właściwości odczytu/zapisu.
Przykład
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
*/
Niezawodne programowanie
W poprzednim przykładzie Name
właściwości i Age
są publiczne i zawierają zarówno metodę dostępu, jak get
i metodę set
dostępu. Publiczne metody dostępu umożliwiają odczytywanie i zapisywanie tych właściwości przez dowolny obiekt. Czasami jednak pożądane jest wykluczenie jednego z akcesoriów. Możesz pominąć metodę set
dostępu, aby właściwość tylko do odczytu:
public string Name
{
get
{
return _name;
}
private set
{
_name = value;
}
}
Alternatywnie można uwidocznić jeden dostęp publicznie, ale udostępnić drugi prywatny lub chroniony. Aby uzyskać więcej informacji, zobacz Asymetryczne ułatwienia dostępu dostępu dostępu.
Po zadeklarowaniu właściwości można ich użyć jako pól klasy. Właściwości umożliwiają składnię naturalną podczas pobierania i ustawiania wartości właściwości, jak w następujących instrukcjach:
person.Name = "Joe";
person.Age = 99;
W metodzie właściwości set
dostępna jest specjalna value
zmienna. Ta zmienna zawiera wartość określoną przez użytkownika, na przykład:
_name = value;
Zwróć uwagę na czystą składnię zwiększającą Age
Person
właściwość obiektu:
person.Age += 1;
Jeśli do modelowania właściwości użyto oddzielnych set
metod i get
, odpowiedni kod może wyglądać następująco:
person.SetAge(person.GetAge() + 1);
Metoda ToString
jest zastępowana w tym przykładzie:
public override string ToString()
{
return "Name = " + Name + ", Age = " + Age;
}
Zwróć uwagę, że ToString
nie jest jawnie używany w programie. Jest on domyślnie wywoływany WriteLine
przez wywołania.