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

关于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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 01:22:42