Страницы

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

четверг, 2 апреля 2020 г.

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

#c_sharp

                    
Добрый день, столкнулся с с таким вопросом, имеется автосвойство с методом доступа 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


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


Ответы

Ответ 1



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

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

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