【发布时间】:2015-12-03 12:04:41
【问题描述】:
是的,我知道这个问题之前已经讨论过很多次了,我阅读了所有关于这个问题的帖子和 cmets,但似乎仍然无法理解。
MSDN 提供的解决此违规问题的选项之一是返回一个 collection(或由 collection实现的 interface >) 访问属性时,但很明显它并不能解决问题,因为大多数集合都不是不可变的,也可以更改。
我在这个问题的答案和 cmets 中看到的另一种可能性是用 ReadOnlyCollection 封装数组并返回它或它的基本接口(如 IReadOnlyCollection),但我不明白如何这解决了性能问题。
如果在任何时候引用该属性,它需要为封装数组的新ReadOnlyCollection 分配内存,那么有什么区别(在性能问题上,不是编辑数组/集合)而不是简单地返回原始数组的副本?
此外,ReadOnlyCollection 只有一个带有IList 参数的构造函数,因此需要在创建数组之前用列表包装数组。
如果我有意在我的类中使用一个数组(而不是作为不可变集合),当我为 ReadOnlyCollection 分配新内存并用它封装我的数组而不是返回数组的副本时,性能会更好吗?
请澄清这一点。
【问题讨论】:
-
谁说这与性能有关?
-
Eric 关于数组的必读文章 - blogs.msdn.com/b/ericlippert/archive/2008/09/22/…