这个`private set`在这个不可变类中有什么不同

时间:2015-07-23 09:01:36

标签: c#

我正在研究这个简单的课程,并想知道名称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

2 个答案:

答案 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的自动属性,因此代码无法编译。这就是为什么你之前需要私人制定者。

请参阅:Getter-only auto-properties