我想在构造函数中设置只读属性“ EmployeeList”,但是由于某些原因,它是不允许的,因为EmployeeList是只读的。但是,对于其他只读属性“ Manager”,它也可以正常工作。唯一的区别是我自己为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以及如何解决呢?
答案 0 :(得分:2)
您可以在构造函数中设置只读automatically-implemented property,但是在您的情况下,您已经指定了一个实现。当您尝试调用“ setter”时,该编译器不知道该怎么做-它不会遍历getter并注意到您正在返回listCopy
变量。 (这甚至可能不是一个字段-我们看不到您的其他getter代码。)
因此,您的选择是:
EmployeeList
更改为自动实现的属性答案 1 :(得分:1)
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
),该字段为只读。但是构造器无法设置属性Manager
(和EmployeeList
)-这是一个属性。