Getters и setters - это пара методов доступа, которые используются в C# для управления доступом к данным, хранящимся в полях класса. Они обеспечивают инкапсуляцию данных, контролируя, как эти данные читаются и модифицируются.
Использование Getters и Setters вместо прямого доступа к полям класса имеет ряд преимуществ:
Getters и Setters скрывают внутреннюю реализацию класса от внешнего кода, предоставляя контролируемый доступ к данным. Это позволяет вам:
Вы можете ограничить доступ к данным, используя модификаторы доступа, такие как `public`, `private`, `protected` и `internal`.
Внутри Getters и Setters вы можете добавить код для проверки корректности значений перед их установкой или получением.
Getters могут использоваться для вычисления значений, которые не хранятся непосредственно в поле.
Getters и Setters могут использоваться для генерации событий, которые уведомляют другие объекты о изменении значения свойства.
Getters и Setters определяются с помощью ключевых слов `get` и `set`:
public class Person
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
}
В этом примере `_name` — это частное поле класса `Person`, а `Name` — это публичное свойство с Getter и Setter.
Getter возвращает значение поля `_name`, а Setter устанавливает значение поля `_name`.
public class Product
{
private decimal _price;
public decimal Price
{
get { return _price; }
set
{
if (value < 0)
{
throw new ArgumentException("Цена не может быть отрицательной.");
}
_price = value;
}
}
}
В этом примере свойство `Price` имеет проверку в Setter, которая не позволяет установить отрицательную цену.
public class Circle
{
private double _radius;
public double Radius
{
get { return _radius; }
set { _radius = value; }
}
public double Area
{
get { return Math.PI * _radius * _radius; }
}
}
В этом примере свойство `Area` не имеет Setter, поскольку его значение вычисляется на основе значения `Radius`.
public class TemperatureSensor
{
private double _temperature;
public event EventHandler TemperatureChanged;
public double Temperature
{
get { return _temperature; }
set
{
_temperature = value;
OnTemperatureChanged();
}
}
protected virtual void OnTemperatureChanged()
{
TemperatureChanged?.Invoke(this, EventArgs.Empty);
}
}
В этом примере свойство `Temperature` генерирует событие `TemperatureChanged`, когда его значение изменяется.
C# предоставляет возможность использовать автоматически реализованные свойства, чтобы упростить код.
Автоматически реализованные свойства не имеют частного поля и не требуют определения Getters и Setters отдельно.
public class Person
{
public string Name { get; set; }
}
В этом примере свойство `Name` автоматически реализованное, и компилятор автоматически создает частное поле и Getters и Setters для него.
Getters и Setters — важные концепции в C#, которые помогают обеспечить инкапсуляцию данных и управление доступом к ним. Использование Getters и Setters делает код более читаемым, гибким и поддерживаемым.
При использовании материалов сайта ссылка на stackoverhow.ru обязательна.