Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Свойства предоставляют удобство использования общедоступных элементов данных без рисков, связанных с незащищённым, неконтролируемым и непроверенным доступом к данным объекта. Свойства объявляют методы доступа: специальные методы, которые назначают и извлекают значения из базового элемента данных. Аксессор set позволяет назначать поля данных, а аксессор get получает значения полей данных.
В этом примере показан класс Person
с двумя свойствами: Name
(строка) и Age
(int). Оба свойства предоставляют get
и set
методы доступа, поэтому они считаются свойствами чтения и записи.
Пример
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
*/
Надежное программирование
В предыдущем примере свойства Name
и Age
являются общедоступными и включают как get
аксессор, так и set
аксессор. Общедоступные методы доступа позволяют любому объекту считывать и записывать эти свойства. Однако иногда желательно исключить один из методов доступа. Чтобы сделать свойство доступным только для чтения, можно опустить аксессор set
.
public string Name
{
get
{
return _name;
}
private set
{
_name = value;
}
}
Кроме того, вы можете предоставить один метод доступа публично, но сделать другой закрытый или защищенный. Дополнительные сведения см. в разделе «Асимметричный доступ аксессора».
После объявления свойств их можно использовать в качестве полей класса. Свойства позволяют использовать естественный синтаксис при получении и установке значения свойства, как в следующих инструкциях:
person.Name = "Joe";
person.Age = 99;
В методе свойства set
доступна специальная value
переменная. Эта переменная содержит значение, указанное пользователем, например:
_name = value;
Обратите внимание на чистый синтаксис для инкрементации свойства Age
объекта Person
.
person.Age += 1;
Если для моделирования свойств использовались отдельные set
методы и get
отдельные методы, эквивалентный код может выглядеть следующим образом:
person.SetAge(person.GetAge() + 1);
В этом примере метод ToString
переопределён.
public override string ToString()
{
return "Name = " + Name + ", Age = " + Age;
}
Обратите внимание, что ToString
в программе явно не используется. Он вызывается по умолчанию вызовами WriteLine
.