Почему я не могу установить это свойство только для чтения в конструкторе? - PullRequest
1 голос
/ 05 мая 2019

Я хочу установить свойство «Только для чтения» «EmployeeList» в конструкторе, но по какой-то причине это не разрешено, так как «EmployeeList» доступен только для чтения.Но он отлично работает для другого свойства readonly «Менеджер».Единственная разница в том, что я написал геттер для EmployeeList самостоятельно, а для Manager он генерируется автоматически.

Мне не разрешено использовать личный установщик для решения этой проблемы.

class Project
    {
        public Employee Manager { get; }

        public EmployeeList EmployeeList
        {
            //Creates a copy of the EmployeeList and returns it
            get
            {
                //...
                return listCopy;
            }
        }

        //Initializes class-variables.
        public Project(Employee manager, EmployeeList 
                        employeeList)
        {
            Manager = manager;
            EmployeeList = employeeList; //Error: EmployeeList is read-only
        }
}

Почему я не могу установить EmployeeList и как я могу это исправить?

Ответы [ 2 ]

2 голосов
/ 05 мая 2019

Вы можете установить только для чтения автоматически внедренное свойство в конструкторе, но в вашем случае вы указали реализацию.Этот компилятор не знает, что делать, когда вы пытаетесь вызвать «установщик» - он не просматривает получатель и не замечает, что вы возвращаете переменную listCopy.(Это может даже не быть полем - мы не можем увидеть остальную часть вашего кода получателя.)

Итак, вы можете выбрать следующие параметры:

  • Изменить EmployeeList на автоматически-реализованное свойство
  • Присвоить непосредственно соответствующему вспомогательному полю
1 голос
/ 05 мая 2019

EmployeeList является собственностью.Он имеет только get метод доступа - так что вы все равно не сможете его установить.С другой стороны, Manager является автоматическим свойством только для чтения, которое равно:

class Project
{
        public readonly Employee _Manager;
        public Employee Manager 
        {
            get { return _Manager; }
        }

        // ...

        //Initializes class-variables.
        public Project(Employee manager, EmployeeList 
                        employeeList)
        {
            _Manager = manager;
            // Manager = manager; //Error: Manageris read-only
        }
}

Итак, когда вы устанавливаете Manager, вы неявно устанавливаете его определяемое компилятором поле (_Manager in this example), который только для чтения.Но свойство ManagerEmployeeList) не может быть установлено конструктором - это свойство.

...