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