首页 > 解决方案 > 为什么我不能在构造函数中设置这个只读属性?

问题描述

我想在构造函数中设置只读属性“EmployeeList”,但由于某种原因,它是不允许的,因为 EmployeeList 是只读的。但它适用于其他只读属性“经理”。唯一的区别是我自己为 EmployeeList 编写了 getter,而对于 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 以及如何解决这个问题?

标签: c#propertiesvisibility

解决方案


您可以在构造函数中设置只读自动实现的属性,但在您的情况下,您已经指定了一个实现。当您尝试调用“setter”时,该编译器不知道该怎么做 - 它不会查看 getter 并注意到您正在返回listCopy变量。(这甚至可能不是一个字段 - 我们看不到您的其余 getter 代码。)

所以你的选择是:

  • 更改EmployeeList为自动实现的属性
  • 直接分配给相关的支持字段

推荐阅读