C# 12 都有哪些新特性?

.NET 首席项目经理凯瑟琳在博客中介绍了 C# 12 的一些预览版新功能,这些功能可以在 Visual Studio 17.6 预览版和最新的.NET 8 预览版中体验。

C# 12 主要有如下新特性:

非记录类和结构的主构造函数 

主构造函数允许将参数添加到类声明本身,并在类主体中使用这些值。

作为记录位置语法的一部分,主构造函数在 C# 9 中引入,而 C# 12 则将主构造函数扩展到所有类和结构

主构造函数的基本语法和用法:

public class Student(int id, string name, IEnumerable<decimal> grades)
{
    public Student(int id, string name) : this(id, name, Enumerable.Empty<decimal>()) { }
    public int Id => id;
    public string Name { get; set; } = name.Trim();
    public decimal GPA => grades.Any() ? grades.Average() : 4.0m;
} 

上面 Student 类中的主构造函数参数在类的整个主体中都可用。

所有类型均可使用 using 指令起别名

C# 12 将 using 指令支持扩展到任何类型,如:

using Measurement = (string, int);
using PathOfPoints = int[];
using DatabaseInt = int?;

可为几乎任何类型起别,如可空值类型,但不能为可空引用类型起别名。

元组比较特别,它可以包含元素名称和类型:

using Measurement = (string Units, int Distance);

可以在任何需要使用类型的地方使用别名。例如:

public void F(Measurement x)
{ }

lambda 表达式的默认值

C# 12 通过允许为参数指定默认值,进一步增强了 lambda 表达式的能力。

语法与其他默认参数相同:

var addWithDefault = (int addTo = 2) => addTo + 1;
addWithDefault(); // 3
addWithDefault(5); // 6

与其他默认值类似,lambda 的默认值将在元数据中发出,并可通过反射作为 lambda  Method 属性的 ParameterInfo 的 DefaultValue 获得。例如:

var addWithDefault = (int addTo = 2) => addTo + 1;
addWithDefault.Method.GetParameters()[0].DefaultValue; // 2

在 C# 12 之前,需要使用本地函数或 System.Runtime.InteropServices 命名空间中的 DefaultParameterValue 来为 lambda 表达式参数提供默认值。这些方法仍然有效,但难阅读,且与方法的默认值不一致。

 

关于上述 C# 12 新功能的详细信息,可以在文档中细阅。

可以在 Roslyn Feature Status 关注 C# 12 的开发进度,还可以在 CSharpLang GitHub 仓库中探索 C# 12 的设计过程,比如相关的建议、讨论和会议记录。

优秀的个人博客,低调大师

微信关注我们

原文链接:https://www.oschina.net/news/236522/csharp-12-news-features

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
优质分享Android(本站安卓app)

优质分享Android(本站安卓app)

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario,低调大师唯一一个Java游戏作品

Mario,低调大师唯一一个Java游戏作品

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。