关于C#中属性使用"=>"操作符的含义及两段代码功能的技术咨询
在C#属性场景中"=>"操作符的含义及代码解析
嘿,我来帮你把这个点掰扯清楚:
"=>"在C#属性里的含义
在C#的属性上下文里,=>是表达式体成员的语法糖,用来简化属性(也可用于方法、索引器等)的定义,让代码更紧凑简洁。它的核心作用是:针对get访问器,把右侧表达式的结果作为属性返回值;针对set访问器,执行右侧的表达式完成赋值逻辑。
第一段代码解析
class Pirat { public string Name => "Jack"; }
这段代码定义了一个Pirat类,里面包含一个只读的Name属性。用=>的简写写法,完全等价于下面的完整语法:
class Pirat { public string Name { get { return "Jack"; } } }
也就是说,不管你创建多少个Pirat实例,它的Name属性永远固定返回字符串"Jack",而且这个属性没有set访问器,外部代码根本没法修改它的值。
第二段代码解析
class Pirat { private string _name; public string Name { get => _name; set => Name = value; } }
这段代码定义了带私有字段_name的Pirat类,Name属性设计为可读可写,但这里有个致命的错误:
get => _name是没问题的,等价于get { return _name; },读取属性时返回私有字段_name的内容;set => Name = value则是无限递归的写法!因为set访问器里直接给Name属性赋值,而不是给私有字段_name赋值,运行时会不断调用自己的set方法,最终触发栈溢出异常(StackOverflowException)。
正确的写法应该把set里的Name改成_name:
class Pirat { private string _name; public string Name { get => _name; set => _name = value; } }
这才是标准的“显式私有字段+属性封装”的写法,外部可以通过Name属性安全地读取或修改私有字段_name的值。
内容的提问来源于stack exchange,提问作者HelpMeWithMyHomework
相关产品推荐
相关产品推荐

