Почему Автоматически реализованные свойства должны определить и получить и установить средства доступа

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

    public string Name {get; set;}

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

    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.

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

32
задан Leniel Maccaferri 24 April 2011 в 21:16
поделиться

2 ответа

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

Реализация свойства с помощью

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

для обычного свойства

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

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

_data = 100;

Примечание: вы можете определить автоматический -prop вот так (как я использую чаще всего).

public int Data { get; private set;}

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

59
ответ дан 27 November 2019 в 20:27
поделиться

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

5
ответ дан 27 November 2019 в 20:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: