Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Właściwości zapewniają wygodę publicznych elementów danych bez ryzyka wynikającego z niechronionego, niekontrolowanego i niezweryfikowanego dostępu 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. Akcesor set umożliwia przypisanie składowych danych, a akcesor get służy do pobierania 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ą akcesory get
i set
, dlatego 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 - {person}");
// Set some values on the person object:
person.Name = "Joe";
person.Age = 99;
Console.WriteLine($"Person details - {person}");
// Increment the Age property:
person.Age += 1;
Console.WriteLine($"Person details - {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 właściwości Name
i Age
są publiczne i zawierają zarówno akcesor get
, jak i akcesor set
. 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 akcesorów. Możesz pominąć metodę dostępu set
, aby właściwość mogła być 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 Asymetryczna dostępność akcesorów.
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ę używaną do zwiększania właściwości Age
na obiekcie Person
:
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.