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

C#三种属性定义方式的差异解析及相关疑问解答

三个C#属性定义示例的差异解析及问题解答

示例代码展示

示例A

public class Product
{
    public string Name { get; set; } = "Limited Edition Item";
}

示例B

public class Product
{
    public string Name { get; set; } => "Limited Edition Item";
}

示例C

public class Product
{
    public string Name => "Limited Edition Item";
}

核心差异解析

  • 示例A:带默认值的可读写自动属性。编译器会自动生成幕后存储字段,= "Limited Edition Item"为该字段设置初始值。可以正常读取当前字段值,也能通过set修改字段内容,修改后读取会返回新值。
  • 示例B:用表达式体实现get访问器的属性,但冗余声明了set。get每次都返回固定字符串,set无实际逻辑——就算给Name赋值,也不会改变任何存储状态,下次读取依然返回固定值,这个set完全无效。
  • 示例C:只读表达式体属性,等价于仅包含get访问器的自动属性,没有set访问器。无法对Name进行赋值操作,每次读取都返回固定字符串。

问题解答

  1. 示例A是否为带有默认值的可读写属性?
    是。{ get; set; }明确标记它是可读写属性,= "Limited Edition Item"为属性的幕后存储字段设置了初始默认值,后续可正常修改该属性的值。

  2. 示例A与示例B之间存在差异吗?
    有本质差异。示例A的属性有实际存储,赋值会修改存储内容,读取返回当前存储值;示例B的get始终返回固定值,set无实际作用,赋值操作不会改变读取结果。

  3. 示例C支持设置操作还是仅为只读属性?
    仅为只读属性。它通过表达式体语法定义,仅包含get访问器,没有set访问器,无法对其进行赋值操作。

内容的提问来源于stack exchange,提问作者d1du

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 05:17:05