C# 为什么可以';我不能在构造函数中设置这个只读属性吗?

C# 为什么可以';我不能在构造函数中设置这个只读属性吗?,c#,properties,visibility,C#,Properties,Visibility,我想在构造函数中设置只读属性“EmployeeList”,但由于某些原因,它是不允许的,因为EmployeeList是只读的。但对于另一个只读属性“Manager”来说,它工作得很好。唯一的区别是我自己为EmployeeList编写了getter,而对于Manager,它是自动生成的 我不允许使用私人setter来解决这个问题 类项目 { 公共雇员经理{get;} 公共雇员名单雇员名单 { //创建EmployeeList的副本并返回它 得到 { //... 返回列表副本; } } //初始化类

我想在构造函数中设置只读属性“EmployeeList”,但由于某些原因,它是不允许的,因为EmployeeList是只读的。但对于另一个只读属性“Manager”来说,它工作得很好。唯一的区别是我自己为EmployeeList编写了getter,而对于Manager,它是自动生成的

我不允许使用私人setter来解决这个问题

类项目
{
公共雇员经理{get;}
公共雇员名单雇员名单
{
//创建EmployeeList的副本并返回它
得到
{
//...
返回列表副本;
}
}
//初始化类变量。
公共项目(员工经理、员工名单
雇员名单)
{
经理=经理;
EmployeeList=EmployeeList;//错误:EmployeeList为只读
}
}

为什么我不能设置EmployeeList以及如何解决此问题?

EmployeeList
是一个属性。它只有
get
accessor方法-因此您无论如何都无法设置它。另一方面,
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
        }
}
因此,当您设置
管理器
时,您会隐式地设置其编译器定义的字段(
\u本例中的管理器
),该字段是只读的。但是属性
Manager
(和
EmployeeList
)不能由构造函数设置-它是一个属性。

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

因此,您的选择是:

  • EmployeeList
    更改为自动实现的属性
  • 直接分配到相关的支持字段
但为什么经理不需要“私人设置”?