从类实例访问私有字段

本文关键字:字段 访问 实例 | 更新日期: 2023-09-27 18:15:54

我想知道为什么这段代码是正确的,并且有可能向私有NameList添加值。我认为私有字段是无法从类实例访问的。

class Program
{
    static void Main(string[] args)
    {
        Test test = new Test();
        test.NameList.AddRange(new[] { "Test" }); // why OK?
        test.Name = "fake";                       // error, OK!
    }
}
class Test
{
    public string Name { get; private set; }
    public List<string> NameList { get; private set; }
}

谢谢。

从类实例访问私有字段

属性的getter是public。因此,它返回一个类型为List<String>的对象,它是可变的。你的代码只是在修改那个对象;完全合法。

将setter声明为private只意味着不能将新的 List<String>对象赋值给NameList