Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Свойства предоставляют удобство использования общедоступных элементов данных без рисков, связанных с незащищённым, неконтролируемым и непроверенным доступом к данным объекта. Свойства объявляют методы доступа: специальные методы, которые назначают и извлекают значения из базового элемента данных. Аксессор 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 .