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

为何用struct而非static class存储常量?以JWT相关结构体为例

解答:JwtHeaderParameterNames/JwtRegisteredClaimNames采用结构体设计的原因

1. 已有静态类常量容器,为何仍用结构体?

  • 历史兼容需求:这类结构体属于早期API设计的遗留产物。在Microsoft.IdentityModel.Tokens的迭代过程中,可能先推出了结构体版本的常量容器,后续为贴合编码规范新增了静态类版本,但为了不破坏大量依赖这些结构体的现有代码,只能保留结构体实现。
  • 语义更精准:结构体在语义上能强化“这些常量完全绑定JWT头/注册声明这个特定实体”的认知,相比通用静态类,能更清晰地传递API意图——看到结构体名就知道这是专属JWT头参数/注册声明的常量集合。

2. 为何设计仅含常量或静态成员的结构体?

  • 隐性限制实例化:结构体无法删除默认无参构造,但如果只存静态成员,开发者即便实例化了结构体,也拿不到任何可用的实例成员,这就从设计上引导用户直接通过类型名访问常量,避免无意义的对象创建。
  • 更清晰的常量分组:结构体作为容器,能把同属一类的JWT常量聚合在一起,在代码补全时,输入JwtHeaderParameterNames.就能直接看到所有头参数相关常量,比零散常量或通用静态类的组织性更强。
  • 早期.NET设计习惯:在.NET发展初期,用结构体做静态常量容器是不少开发者的选择,属于当时的常见编码风格。虽然现在更推荐用静态类,但历史遗留的API会延续这种设计。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 02:53:12