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

构造函数调用时如何实现缓存?为何无法给this赋值?

为什么构造函数里不能执行this = Cache.MyClassObjects[name]

在C#里,这种写法根本走不通,核心原因有两个:

  • this在构造函数中是只读引用:当你调用new MyClass(...)时,CLR已经提前分配内存创建了一个全新的MyClass实例,构造函数的唯一职责就是初始化这个刚生成的实例。此时this是指向这个新实例的只读引用,类似readonly字段的特性,你无法给它重新赋值指向缓存里的另一个对象。
  • 构造函数没有“返回对象”的权限:new关键字的语义就是“创建新对象”,构造函数只是配合new完成新实例的初始化工作,它没办法改变new操作的最终结果——不管你在构造函数里做什么,new最终都会返回它自己创建的那个新实例,而非你缓存里已存在的对象。

你想让构造函数直接返回缓存对象的思路虽然直观,但完全违背了构造函数的设计逻辑。构造函数从诞生起就不是用来实现对象复用的,它只负责填充new出来的空白实例的数据。

而你提到的静态方法方案才是正确的方向:比如写一个public static MyClass GetOrCreate(string name, int value)的静态方法,先检查缓存,存在就直接返回;不存在就调用构造函数创建新实例,存入缓存后再返回。这既符合C#的语法规则,也能实现你需要的缓存复用需求。

内容的提问来源于stack exchange,提问作者Jason

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 08:31:02