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

结构体(struct)的readonly方法有何作用?VS为何建议添加?

结构体方法的readonly修饰符解析

问题背景

  • 编写C#结构体时,Visual Studio建议给方法添加readonly修饰符,但之前只了解字段可以设置readonly,不清楚方法加该修饰符的具体含义
  • 在MSDN中未找到关于readonly方法的明确说明,相关内容多围绕readonly参数或ref readonly返回值展开
  • 自己的方法返回void,显然不是为了修改返回值,推测其作用是让方法内的this变为只读,但疑惑这是否等同于使用in参数的扩展方法(如ExtMethod(this in MyStruct self)),即结构体按引用传递

前提纠正

之前的疑问存在错误前提:结构体的方法调用原本就是按引用传递的,不存在普通方法会完全复制结构体实例的情况。

代码示例

public struct MyStruct {
    ...
    // 原本的写法
    public void MyMethod() { ... }
    // VS 建议的写法
    public readonly void MyMethod() { ... }
}

readonly方法的实际作用

  • 强制只读约束:标记readonly后,方法内部无法修改结构体的任何字段(包括私有字段),编译器会进行强制检查,避免意外修改结构体状态
  • 性能优化空间:编译器明确该方法不会修改结构体实例后,可执行更多安全的性能优化,比如复用引用、减少不必要的内存操作
  • 与in参数的区别:in是针对方法参数的传递约束,而readonly方法是结构体成员自身的标记,二者核心都是实现只读引用访问,但readonly方法是对结构体成员方法的直接语义约束,更贴合结构体自身的设计意图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 18:40:00