Подтвердить что ты не робот

Почему автоматически реализуемые свойства должны определять как get, так и set accessors

Когда мы определяем свойство типа

    public string Name {get; set;}

dot net может сделать наш код свойств. но когда мы используем

    public string Name {get;}
    public string Name {set;}

мы сталкиваемся с

'Hajloo.SomeThing.PropertyName.set' must declare a body because it is not marked abstract or extern. Automatically implemented properties must define both get and set accessors.

Собственно, почему компилятор не может определить свойство и сделать код автоматически? В чем проблема?

4b9b3361

Ответ 1

Поскольку автоматически реализованные свойства генерируют собственное хранилище для значений свойств. У вас нет доступа к внутреннему хранилищу.

Реализация свойства с

  • just get: означает, что вы можете получить только значения. Вы никогда не можете установить значение свойства (даже в содержащем классе)
  • только что установленный: означает, что вы можете устанавливать значения только. Вы не можете получить значение свойства.

для нормального свойства

private int _data;
public int Data{  get { return _data } };

Здесь родительский класс может делать следующее в другом месте в классе (которое не может быть с авто реквизитами)

_data = 100;

Примечание. Вы можете определить автоматическое прокручивание, подобное этому (именно так я использую его больше всего).

public int Data { get; private set;}

Это означает, что свойство не может быть установлено внешними клиентами класса. Однако сам содержащийся класс может установить свойство несколько раз через this.Data = x; в определении класса.

Ответ 2

Если сеттер не установлен, свойство никогда не может иметь ничего, кроме значения по умолчанию, поэтому не подходит для каких-либо целей.