如何设置类的field/property仅外部可读、仅类内部指定方法可修改?
解决方案
不是只有GetAge()这一种解决办法,C#支持属性访问器的独立权限修饰,可以直接实现外部只读、类内部可修改的需求,不需要单独为每个字段编写Get方法。
你可以将属性的get访问器设为public,set访问器设为private,即可满足要求:外部代码只能读取属性值,只有类内部的方法(比如你提到的Grow())有权限修改属性值。
示例代码如下:
class Person { // 公开get、私有set的自动属性,不需要手动定义存储字段 public int Age { get; private set; } Person(int age) { Age = age; } void Grow() { // 类内部可以正常修改Age的值 Age++; } }
这种写法比单独写GetAge()方法简洁很多,你有多少个这类字段就写多少个对应属性即可,不需要额外实现get逻辑,外部直接通过实例.Age读取值即可。
如果你需要更强的封装限制,避免类内部其他方法误修改字段,也可以保留私有存储字段,只给属性定义get访问器:
class Person { private int _age; // 仅公开get访问器,返回私有字段的值 public int Age => _age; Person(int age) { _age = age; } void Grow() { _age++; } }
内容的提问来源于stack exchange,提问作者user2261062
相关产品推荐
相关产品推荐

