sách gpt4 ăn đã đi

c# - 集合属性应该是只读的——漏洞?

In lại 作者:太空狗 更新时间:2023-10-30 00:05:29 27 4
mua khóa gpt4 giày nike

在坚持代码分析错误的过程中,我正在将我的属性更改为具有私有(private) setter 。然后我开始尝试更多地了解Tại sao。根据一些研究,MS 说 cái này :

A writable collection property allows a user to replace the collection with a completely different collection.

答案 đây 指出:

Adding a public setter on a Danh sách object is dangerous.

但是没有列出它危险的lý do。这就是我很好奇的部分。

如果我们有这个集合:

public List Foos { get; set; }

为什么要将 setter 设为私有(private)?显然我们不希望客户端代码thay thế集合,但是如果客户端可以删除每个元素,然后添加他们想要的任何元素,那有什么意义?这与完全替换集合不一样吗?遵循此代码分析规则如何提供值(value)?

câu trả lời hay nhất

不公开 setter 可以防止集合被赋值为 vô giá trị 的情况。 vô giá trị 和没有任何值的集合是有区别的。考虑:

for (var value in this.myCollection){//做某事

当没有值时(即有人对每个值都调用了 Remove),没有什么不好的事情发生。但是,当 this.myCollection 为 null 时,将抛出 NullReferenceException

代码分析假设您的代码在操作之前不检查 myCollection 是否为 null。

它可能也是对 System.Collections.Concurrent 中定义的线程安全集合类型的额外保护。想象一些线程试图通过覆盖它来替换整个集合。通过摆脱公共(public) setter,线程唯一的选择就是调用线程安全的 Thêm vàoRemove phương pháp.

关于c# - 集合属性应该是只读的——漏洞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11349507/

27 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress