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

C# 6.0引入的Auto-implemented properties究竟是什么?为何C#5.0可使用基础自动属性?

问题解答

核心误解:基础自动实现属性并非C#6.0新增

你看到的public string Bar { get; set; }这类带读写访问器的自动实现属性,早在C#3.0就已经引入,所以在C#5.0环境下能正常编译运行完全合理。

微软版本历史页面提到的"Auto-implemented properties"作为C#6.0新增特性,指的是自动实现属性的增强功能,而非基础的读写自动属性。


C#6.0新增的自动实现属性增强特性

以下这些是C#6.0才支持的自动实现属性相关功能,在C#5.0环境下编译会失败:

  • 只读自动实现属性的声明式初始化:无需在构造函数中赋值,直接在属性声明时设置默认值
    // C#6+支持,C#5及以下报错
    public class Foo
    {
        public string Bar { get; } = "default value";
    }
    
  • 只读自动实现属性的构造函数赋值:只读自动属性可以在构造函数中赋值(C#5及以下的只读属性必须手动写私有字段+getter,无法用自动实现语法)
    // C#6+支持,C#5及以下报错
    public class Foo
    {
        public string Bar { get; }
        public Foo(string bar)
        {
            Bar = bar;
        }
    }
    
  • 表达式体形式的只读自动属性:用箭头表达式简化getter实现
    // C#6+支持,C#5及以下报错
    public class Foo
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string FullName => $"{FirstName} {LastName}";
    }
    

为什么你的测试代码能在C#5.0运行?

你写的public string Bar { get; set; }是C#3.0就支持的基础自动实现属性,和C#6.0的增强特性无关。而字符串插值$"{x}"、空条件运算符x?.y确实是C#6.0的全新特性,所以在C#5.0环境下会编译失败,这和自动实现属性的情况并不矛盾。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 15:17:37