我正在研究这个简单的课程,并想知道名称private set
的{{1}}实际上有什么不同?
如果该行只是阅读property
,用户与班级的互动将如何变化?
public string Name { get; }
它们都是只读属性,并且此类的对象只能通过静态方法构造,因此如果名称的public class Contact2
{
// Read-only properties.
public string Name { get; private set; }
public string Address { get; }
// Private constructor.
private Contact2(string contactName, string contactAddress)
{
Name = contactName;
Address = contactAddress;
}
// Public factory method.
public static Contact2 CreateContact(string name, string address)
{
return new Contact2(name, address);
}
}
是私有的,那么它是否重要?
编辑
这是此MSDN代码的一部分:
https://msdn.microsoft.com/en-us/library/bb383979.aspx
答案 0 :(得分:5)
在C#6中:
public string Name { get; private set; }
可以从班级中的任何方法设置。
public string Address { get; }
是一个只读属性,只能(并且必须)在初始化时设置。
在你的代码中,它们以相同的方式运行,但是只读属性强制执行额外的约束,使属性不可变,因为它只能设置一次,而你可以在类中添加一个变异{{1使类可变。
答案 1 :(得分:3)
在C#6.0之前不允许使用像public string Name { get; }
这样的仅限Getter的自动属性,因此代码无法编译。这就是为什么你之前需要私人制定者。