news 2026/4/30 13:52:33

C语言完整特性详情

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C语言完整特性详情

C# 10 完整特性介绍

前言:

C#使其拥有强如 Haskell 、Rust 的表达能力,不仅能提供从头到尾的跨程序集的静态类型支持,还能做到像动态类型语言那样的灵活。逻辑代码是类型的证明,只有类型系统强大了,代码编写起来才能更顺畅、更不容易出错。

1、record struct

首先自然是 record struct,解决了 record 只能给 class 而不能给 struct 用的问题:

1

recordstructPoint(intX,intY);

用 record 定义 struct 的好处其实有很多,例如你无需重写GetHashCodeEquals之类的方法了。

2、sealed record ToString 方法

之前 record 的 ToString 是不能修饰为sealed的,因此如果你继承了一个 record,相应的 ToString 行为也会被改变,因此这是个虚方法。

但是现在你可以把 record 里的 ToString 方法标记成sealed,这样你的ToString方法就不会被重写了。

3、struct 无参构造函数

一直以来 struct 不支持无参构造函数,现在支持了:

1

2

3

4

5

structFoo

{

publicintX;

publicFoo() { X = 1; }

}

但是使用的时候就要注意了,因为无参构造函数的存在使得new struct()default(struct)的语义不一样了,例如new Foo().X == default(Foo).X在上面这个例子中将会得出false

4、匿名对象的 with

可以用 with 来根据已有的匿名对象创建新的匿名对象了:

1

2

var x =new{ A = 1, B = 2 };

var y = x with { A = 3 };

这里 y.A 将会是 3 。

5、全局的 using

利用全局 using 可以给整个项目启用 usings,不再需要每个文件都写一份。比如你可以创建一个 Import.cs,然后里面写:

1

2

usingSystem;

usingi32 = System.Int32;

然后你整个项目都无需再 using System,并且可以用 i32 了。

6、文件范围的 namespace

这个比较简单,以前写 namespace 还得带一层大括号,以后如果一个文件里只有一个 namespace 的话,那直接在最上面这样写就行了:

1

namespaceMyNamespace;

7、常量字符串插值

你可以给 const string 使用字符串插值了,非常方便:

1

2

conststringx ="hello";

conststringy = $"{x}, world!";

8、lambda 改进

这个改进可以说是非常大,我分多点介绍。

8.1. 支持 attributes

lambda 可以带 attribute 了:

1

2

3

f = [Foo] (x) => x;// 给 lambda 设置

f = [return: Foo] (x) => x;// 给 lambda 返回值设置

f = ([Foo] x) => x;// 给 lambda 参数设置

8.2. 支持指定返回值类型

此前 C# 的 lambda 返回值类型靠推导,C# 10 开始允许在参数列表最前面显示指定 lambda 类型了:

1

f =int() => 4;

8.3. 支持 ref 、in 、out 等修饰

1

f =refint(refintx) =>refx;// 返回一个参数的引用

8.4. 头等函数

函数可以隐式转换到 delegate,于是函数上升至头等函数:

1

2

3

voidFoo() { Console.WriteLine("hello"); }

var x = Foo;

x();// hello

8.5. 自然委托类型

lambda 现在会自动创建自然委托类型,于是不再需要写出类型了。

1

2

3

var f = () => 1;// Func<int>

var g = string (intx, string y) => $"{y}{x}";// Func<int, string, string>

var h ="test".GetHashCode;// Func<int>

9、CallerArgumentExpression

现在,CallerArgumentExpression这个 attribute 终于有用了。借助这个attribute,编译器会自动填充调用参数的表达式字符串,例如:

1

2

3

4

voidFoo(intvalue, [CallerArgumentExpression("value")]string? expression =null)

{

Console.WriteLine(expression +" = "+ value);

}

当你调用Foo(4 + 5)时,会输出4 + 5 = 9。这对测试框架极其有用,因为你可以输出 assert 的原表达式了:

1

2

3

4

staticvoidAssert(boolvalue, [CallerArgumentExpression("value")]string? expr =null)

{

if(!value)thrownewAssertFailureException(expr);

}

10、tuple 支持混合定义和使用

比如:

1

2

inty = 0;

(var x, y, var z) = (1, 2, 3);

于是 y 就变成 2 了,同时还创建了两个变量 x 和 z,分别是 1 和 3 。

11、接口支持抽象静态方法

这个特性将会在 .NET 6 作为 preview 特性放出,意味着默认是不启用的,需要设置 <LangVersion>preview</LangVersion> 和 <EnablePreviewFeatures>true</EnablePreviewFeatures>,然后引入一个官方的 nuget 包 System.Runtime.Experimental 来启用。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/30 13:51:35

终极自动化工具配置指南:3步解锁网易云音乐插件生态完整方案

终极自动化工具配置指南&#xff1a;3步解锁网易云音乐插件生态完整方案 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer BetterNCM安装器是一款基于Rust开发的智能插件管理工具&#x…

作者头像 李华
网站建设 2026/4/30 13:49:49

短剧出海翻译避坑指南:我们踩过的5个坑和对应的解法

做短剧出海翻译这件事&#xff0c;坑比想象中多。不是翻译本身有多难&#xff0c;而是整个流程里有太多细节会在你不注意的时候悄悄出问题——OCR识别出了错你不知道&#xff0c;专有名词翻偏了你没发现&#xff0c;100集批量处理卡在中间你不知道从哪里排查&#xff0c;字幕压…

作者头像 李华
网站建设 2026/4/30 13:48:44

Unity Mod Manager深度解析:模块化架构设计与技术实现

Unity Mod Manager深度解析&#xff1a;模块化架构设计与技术实现 【免费下载链接】unity-mod-manager UnityModManager 项目地址: https://gitcode.com/gh_mirrors/un/unity-mod-manager Unity Mod Manager作为Unity引擎游戏模组管理的核心技术解决方案&#xff0c;通过…

作者头像 李华
网站建设 2026/4/30 13:47:55

2026知网降AI工具排行榜TOP5:实测哪款让毕业生不交智商税!

知网是 2026 年国内毕业生最常面对的 AIGC 检测平台。绝大部分高校把知网作为最终查重和 AI 率检测的官方系统&#xff0c;所以"过知网 AIGC 检测"基本就是过毕业关的核心要求。 但市面上号称"知网降 AI"的工具一抓一大把&#xff0c;单价从 1.2 元/千字到…

作者头像 李华