这个“私有集合”在这个不可变类中有什么不同?
本文关键字:不可变 什么 集合 私有集合 这个 | 更新日期: 2023-09-27 18:04:07
我正在学习这个简单的类,想知道名称property
的private set
实际上有什么不同?
如果这行只是读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);
}
}
它们都是只读属性,并且该类的对象只能通过静态方法构造,那么name的set
是否是私有的有关系吗?
编辑
它是MSDN代码的一部分:
https://msdn.microsoft.com/en-us/library/bb383979.aspx
c# 6中:
public string Name { get; private set; }
可以从类中的任何方法设置。
public string Address { get; }
是一个只读属性,只能(而且必须)在初始化时设置。
在你的代码中,它们的功能是相同的,但是只读属性强制了一个额外的约束,使属性不可变,因为它只能设置一次,而你可以添加一个方法来改变Name
,使类可变。
在c# 6.0之前,像public string Name { get; }
这样的仅getter的自动属性是不允许的,因此代码无法编译。这就是为什么你需要一个私有setter。