c# - 为什么我不能在构造函数中设置这个只读属性?
问题描述
我想在构造函数中设置只读属性“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 以及如何解决这个问题?
解决方案
您可以在构造函数中设置只读自动实现的属性,但在您的情况下,您已经指定了一个实现。当您尝试调用“setter”时,该编译器不知道该怎么做 - 它不会查看 getter 并注意到您正在返回listCopy
变量。(这甚至可能不是一个字段 - 我们看不到您的其余 getter 代码。)
所以你的选择是:
- 更改
EmployeeList
为自动实现的属性 - 直接分配给相关的支持字段
推荐阅读
- java - 创建排除引号内容的空格分隔列表
- java - 如何根据java 8中的某些条件迭代和过滤列表?
- c - 在变量初始化上强制转换指向 Matrix 的指针是引用或副本
- java - 自定义对象如何存储在 HashMap 中
- javascript - 带有 boostrap-vue b-table 的 V 模型
- ios - MPMediaPickerController 从不显示在 iOS 13 上,没有打印错误
- c - 运行 Windows SendInput API 时显示器闪烁
- arrays - 计算文本评论中大写单词的数量
- c++ - QT5:无法使用 qss 文件设置样式表属性
- reactjs - MobX 将存储重置为初始状态