Страницы

Поиск по вопросам

воскресенье, 9 июня 2019 г.

Разница между присваиванием значения автосвойству и приватному полю со свойством

Добрый день, столкнулся с с таким вопросом, имеется автосвойство с методом доступа get
public string Name {get;}
С помощью конструктора я присваиваю ему значение
public MyClass() { Name = "Max"; }
Автосвойство успешно принимает значение, в другом случае я явно указываю приватное поле и свойство с методом доступа get
private string name; public string Name; { get { return name;} }
Так же присваиваю значение с помощью конструктора
public MyClass() { Name = "Max"; }
И в данном случае я получаю ошибку
Error CS0200 Property or indexer 'MyClass.Name' cannot be assigned to -- it is read only
Насколько мне известно, при использовании автосвойства приватное поле создаётся неявно, почему тогда не возникает такая же ошибка?


Ответ

До недавнего времени возникала.
Это разрешили в шестой версии C# и код в итоге раскрывается в следующий
class MyClass{
private string name; public string Name { get { return name;} }
public MyClass() { name= "Max"; }
}
Отсюда видно, что в конструкторе присваивается внутреннее поле, а не идет вызов самого свойства.

Комментариев нет:

Отправить комментарий