为什么一个集合 属性 可以在没有设置的情况下进行更改?

Why does a collection property can be changed without set?

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;

namespace ConsoleApplication11
{

    class Customer
    {

        public List<string> Strings
        {
            get;

        } = new List<string>();
        class Program
        {
            static void Main(string[] args)
            {
                Customer myCustomer = new Customer();
                myCustomer.Strings.Add("test");
            }
        }
    }
}

最后,可以在 属性 声明中添加集合 Strings 而无需 set。为什么c#这么设计?如果 collection 像正常的 属性 一样工作会更容易理解,对吗?

它运行正常,你没有用那个操作设置属性。 List<> 是一个对象,您所做的只是调用已分配给 Strings 属性.

的该对象的方法

如果您改为这样做:

static void Main(string[] args)
{
    Customer myCustomer = new Customer();
    myCustomer.Strings = new List<string>();
}

您会发现它无法编译,因为它试图将新值分配给没有 setter.

的 属性

看这行代码:

public List<string> Strings { get; } = new List<string>();

这段代码看起来像是在说 属性 Strings 包含一个字符串列表。但事实并非如此,因为在 C# 中,变量不能包含对象。此代码表示 属性 Strings 持有对字符串列表的 reference

向此列表添加元素时,不会更改 Strings 属性 的值。您正在修改对象,但没有修改引用。由于您没有更改 Strings 属性 的值,因此不需要 setter。