Свойство с и без {get; задавать; }

Я новичок в С#

В чем разница между

public string MyValue;

и

public string MyValue { get; set; }

Я всегда предполагал, что оба они одинаковы. Что-то не работало в моем коде. Использование последней формы заставило ее работать. Но не знаю, в чем разница. Вы можете помочь?

Спасибо

Ответ 1

Первое - это публичное поле, второе - автоматически реализуемое публичное свойство.

Они не совпадают. С автоматически реализованным свойством компилятор будет генерировать личное поле поддержки.

Хотя оба они могут работать как способ предоставить данные из вашего класса, вы должны использовать свойства, следуя принципу скрытия информации. Поля должны быть частными и доступны только через свойства. Это позволяет вам вносить изменения в реализацию, не нарушая вызывающих абонентов.

Ответ 2

Если "последний сделал это", вы, вероятно, используете привязку данных; привязка данных обычно работает только против свойств (а не полей). Это могут быть явные свойства или автоматически реализованные свойства, как в вашем примере.

Обратите внимание, что переход из поля в свойство может нарушить сериализацию, если вы используете BinaryFormatter (какой-либо ИМО глубоко испорчен), но свойства предпочтительны по сравнению с полями очень. Абсолютно выполните это изменение: p

Ответ 4

На самом деле это разные конструкции.

Эта форма является единственным способом фактического выделения памяти для данных:

string MyData;

Это называется "полем".

Эта форма называется "автоматически реализуемым свойством":

string MyData { get; set; }

Компилятор переводит это на что-то вроде этого:

string myDataField;

string MyData
{
    get { return myDataField; }
    set { myDataField = value; }
}

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