这个“私有集合”在这个不可变类中有什么不同?

本文关键字:不可变 什么 集合 私有集合 这个 | 更新日期: 2023-09-27 18:04:07

我正在学习这个简单的类,想知道名称propertyprivate 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。