C#中为值定义{ get; set; }的含义是什么,与公有字段有何区别?
C# 字段、自动属性、自定义访问器的区别说明
两种公开成员声明的差异
public int value { get; set; }是C#的自动实现属性:编译器会在背后自动生成一个你看不到的私有存储字段,同时生成对应的get(读取)、set(写入)方法来操作这个隐藏字段。后续如果需要给值的读写加逻辑(比如写入前校验数值范围、读取前做懒加载),或者调整访问权限(比如设置成public int value { get; private set; }实现外部只读、类内部可写),都不需要改外部调用这个属性的代码,扩展性很强。public int value是公开字段:直接把存储数据的底层字段暴露给外部,没有任何中间层包装。后续如果要给这个值的读写加任何逻辑,所有直接调用这个字段的代码都要跟着改,维护成本很高,C#官方编码规范一般不推荐直接声明公开字段。
自定义get访问器的作用
你提到的写法public int value { get {return "data:"+somevalue;}} 是自定义属性访问器的写法,不过这个示例本身存在类型不匹配的问题:属性声明的返回类型是int,但返回的是字符串拼接结果,实际运行会报错,正常使用要保证返回值和声明类型一致。
这种自定义get的属性属于计算属性,不需要底层的存储字段,每次读取这个属性的时候,都会实时执行get块里的逻辑返回计算结果,常见使用场景包括:
- 把多个内部字段的计算结果统一对外暴露,比如内部存了出生日期,就可以写个
Age的计算属性,每次读取的时候自动用当前时间减去出生日期算出年龄,不需要额外维护年龄字段同步更新 - 读取属性时执行额外逻辑,比如日志打印、权限校验
- 对返回值做统一格式化处理,避免每次调用时重复写处理逻辑
内容的提问来源于stack exchange,提问作者WORM HACKER
相关产品推荐
相关产品推荐

