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

StackOverflow https://stackoverflow.com/questions/2597890

Вопрос

Когда мы определяем недвижимость, как

    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.

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

Это было полезно?

Решение

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

Реализация недвижимости с

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

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

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

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

_data = 100;

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

public int Data { get; private set;}

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

Другие советы

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

Более современный сценарий для получения этой ошибки является строительный код, который использует синтаксис C # 6, используя версию VisualStudio, которая меньше, чем VS 2015 (или использование MSBuild, который составляет менее 14).

В C # 6.0 допускается иметь автопровертисты, которые не имеют установщика (они предполагаются личным набором).

Попробуйте компилировать VS2015 + или MSBuild 14+ .. Или модифицируйте код, чтобы все автопровертии имеют установку.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top