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

如何让C#类中变量仅可被单个方法修改、全局可读?

实现方法

要实现“变量任意位置可读,但仅类内单个方法可修改”的需求,C#没有原生语法直接支持,但可以通过私有字段+只读公共属性的封装方式达成,具体实现如下:

public class ClassA
{
    // 私有字段:仅类内部可访问,且仅在指定方法中修改
    private int _integerA;

    // 公共只读属性:允许任意位置读取值,无setter禁止外部修改
    public int IntegerA => _integerA;

    public ClassA(){}

    public void MethodA()
    {
        // 该方法内可直接修改私有字段
        _integerA = 100;
    }

    public void MethodB()
    {
        // 此处无法直接修改_integerA,编译会报错
        // _integerA = 100; // 取消注释会触发编译错误
    }
}

public class ClassB
{
    public void MethodC()
    {
        ClassA classA = new ClassA();

        // 正常读取值
        int b = classA.IntegerA;

        // 无法直接修改IntegerA,因为属性是只读的
        // classA.IntegerA = 100; // 取消注释会触发编译错误
    }
}

方案说明

  • 私有字段_integerA仅对ClassA内部可见,类内只有MethodA能直接对它赋值,其他方法(如MethodB)无法直接修改该字段
  • 公共只读属性IntegerA提供了全局读取的入口,由于没有定义setter,外部代码无法直接修改它的值
  • 如果需要限制类内其他方法通过调用MethodA间接修改值,可以将MethodA的访问修饰符改为private,但这会同时禁止外部调用该方法修改值,可根据实际需求调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 23:52:37