对于C#属性,我可以这样做:
public class Employee{
public string Name { get; private set; }
public Employee(string name){
Name = name;
}
}
表示可以在Employee&类中设置Name属性。可以公开阅读。
但是,如果我想将集合限制在Employee类的构造函数中,我需要这样做:
public class Employee{
public readonly string Name = String.Empty;
public Employee(string name){
Name = name;
}
}
但是,对于这种情况,我不得不将属性更改为字段。
C#中是否存在任何可能/不允许的原因:
public class Employee{
public string Name { get; private readonly set; }
public Employee(string name){
Name = name;
}
}
IMO这将允许我们拥有只能在构造函数和设置中设置的属性。不要求我们将属性更改为字段...
谢谢!
答案 0 :(得分:7)
使用
private readonly string name = Empty.String;
public string Name { get { return name; } }
答案 1 :(得分:2)
出了什么问题:
public class Employee
{
private string nameField;
public string Name
{
get
{
return this.nameField;
}
}
public Employee(string name)
{
this.nameField = name;
}
答案 2 :(得分:1)
readonly适用于变量而不适用于方法。 set
由编译器转换为方法,因此readonly
属性没有意义。
为了达到你想要的目标。
public class Employee
{
private readonly string _name;
public string Name
{
get
{
return _name;
}
}
public Employee(string name)
{
_name = name;
}
}
答案 3 :(得分:0)
如果你只关心在你当前所在的类的构造函数中设置属性,那么只需将它设置为具有私有setter的属性,并且不要在类中设置它...它不像你无法控制这种情况。
$ 0.02
答案 4 :(得分:0)
你可以拥有
public class Employee{
public string Name { get; private set; }
public Employee(string name){
Name = name;
}
}
这将成为一个只读的公共财产。如果你考虑一下,在公共财产上拥有一个私有的只读setter并不是真的有意义,因为你想要setter只读取一个方法,而不是一个变量。
如果你只是设置了setter,那么你所做的就是拒绝任何设置属性值的访问。这就是您需要支持字段的原因。