为什么一个集合 属性 可以在没有设置的情况下进行更改?
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。
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。