gpt4 book ai didi

c# - 为什么允许我修改对象初始值设定项只读的属性?

转载 作者:太空狗 更新时间:2023-10-29 19:59:30 24 4
gpt4 key购买 nike

我有这个简单的代码:

public static void Main(String[] args)
{
Data data = new Data { List = { "1", "2", "3", "4" } };
foreach (var str in data.List)
Console.WriteLine(str);
Console.ReadLine();
}

public class Data
{
private List<String> _List = new List<String>();
public List<String> List
{
get { return _List; }
}
public Data() { }
}

所以当我创建数据类时:

Data data = new Data { List = { "1", "2", "3", "4" } };

即使没有set,列表中也充满了字符串“1”、“2”、“3”、“4”。

为什么会这样?

最佳答案

您的对象初始值设定项(带有 List 的集合初始值设定项)

Data data = new Data { List = { "1", "2", "3", "4" } };

变成如下:

var tmp = new Data();
tmp.List.Add("1");
tmp.List.Add("2");
tmp.List.Add("3");
tmp.List.Add("4");
Data data = tmp;

以这种方式查看它应该清楚为什么您实际上要添加到 string1 而不是添加到 string2:tmp.List 返回 string1。您永远不会分配给该属性,您只需初始化返回的集合。因此,您应该在此处查看 getter,而不是 setter。

但是,Tim 是绝对正确的,以这种方式定义的属性没有任何意义。这违反了最小意外原则,并且对于该类的用户来说,那里的 setter 发生了什么并不明显。只是不要做这样的事情。

关于c# - 为什么允许我修改对象初始值设定项只读的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33037752/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com