我正在阅读有关在何时使用属性和方法的MSDN文档,其中涉及到一条规则引起了我的质疑:
如果“操作返回一个数组”,则应该使用方法(而不是属性)。
页面链接: 选择属性和方法之间
如果操作返回一个数组,则使用方法,因为要想保留内部数组,你必须返回数组的一个深拷贝,而非属性使用的数组的引用。这个事实与开发人员将属性视为字段相结合,会导致非常低效的代码。
我理解属性的get方法会返回对数组的引用,这将允许修改数组即使没有set。在他们给出的示例中,每次访问属性都会进行一次深拷贝,我想是为了避免此情况发生,但这反过来又非常低效。
如果属性只返回引用而不做所有复制,那么它就不会低效了,是吗?而且,使用方法而不是属性并不能自动保护列表免于被修改。这几乎是相同的情况,你仍然需要进行深拷贝。
使用属性并仅返回对数组的引用总是不好的习惯吗?如果你希望调用程序员能够修改数组,或者你不关心他们是否修改它,那么这样做是否仍然不好,并且为什么?如果真的不好,那么允许调用者进行修改的适当方式是什么?