在C#属性Getter中创建新对象是否符合最佳实践?
在C#属性Getter中创建新对象的常见问题
嘿,关于你在C#属性Getter里创建新对象的做法,Stack Exchange上不少资深开发者都一致认为这属于不良实践,具体问题主要有这几点:
违背Getter的设计初衷
Getter的核心职责是获取已有数据,而不是执行创建或修改操作。正如高赞回答提到的:是的,这是不良实践。理想情况下,Getter不应更改或创建任何内容
调用者调用属性的时候,预期的是快速拿到一个现成的值,而不是触发一次对象实例化的逻辑,这完全打破了封装的直觉。破坏结果一致性
正常情况下,两次读取同一个属性应该得到相同的结果,但每次在Getter里new新对象的话,返回的都是不同的引用实例。比如执行:var first = myObject.MyProperty; var second = myObject.MyProperty;此时
first == second(引用比较)会返回false,这很容易让调用者产生误解,甚至在判断属性是否变化、做相等性校验时引发逻辑bug。隐藏性能损耗
如果这个属性被频繁调用,每次创建新对象都会带来额外的内存分配,长期下来会增加GC的压力,尤其是在高并发或者性能敏感的场景中,这种隐性的性能开销很难被定位和优化。可能引入意外副作用
要是创建对象的过程中还包含其他逻辑(比如读取本地文件、调用外部接口),那这个Getter就变成了一个带有副作用的方法,完全偏离了它原本的职责。调用者根本想不到,仅仅是读取一个属性,居然会触发这么多额外操作。
内容的提问来源于stack exchange,提问作者Bbx
相关产品推荐
相关产品推荐

