You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:36:05