如何让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
相关产品推荐
相关产品推荐

