当前位置:首页 > 科技  > 软件

C# 12 中新增的几大功能你都知道吗?

来源: 责编: 时间:2024-04-23 09:13:58 263观看
导读转眼之间C#都已经更新到了12了,那么C# 12 中新增的八大功能大家都了解过吗?今天我们来简单讲解一下C# 12 中的八大新增功能。一、主构造函数在 Visual Studio 2022 版本 17.6 预览版 2 中引入。从 C# 12 开始,可以在类和

转眼之间C#都已经更新到了12了,那么C# 12 中新增的八大功能大家都了解过吗?今天我们来简单讲解一下C# 12 中的八大新增功能。odA28资讯网——每日最新资讯28at.com

odA28资讯网——每日最新资讯28at.com

一、主构造函数

在 Visual Studio 2022 版本 17.6 预览版 2 中引入。odA28资讯网——每日最新资讯28at.com

odA28资讯网——每日最新资讯28at.com

从 C# 12 开始,可以在类和结构中声明主构造函数。主构造函数参数都在类的整个主体的范围内。 为了确保显式分配所有主构造函数参数,所有显式声明的构造函数都必须使用 this() 语法调用主构造函数。 将主构造函数添加到 class 可防止编译器声明隐式无参数构造函数。 在 struct 中,隐式无参数构造函数初始化所有字段,包括 0 位模式的主构造函数参数。odA28资讯网——每日最新资讯28at.com

1.主构造函数参数的最常见用途包括:

  • 作为 base() 构造函数调用的参数。
  • 初始化成员字段或属性。
  • 引用实例成员中的构造函数参数。

2.代码示例

将任何参数放在类型名称后面的括号中:odA28资讯网——每日最新资讯28at.com

public class NameParameter(string name){    public string Name => name;}

以下代码初始化从主构造函数参数计算的两个只读属性:odA28资讯网——每日最新资讯28at.com

public readonly struct Distance(double dx, double dy){    public readonly double Magnitude { get; } = Math.Sqrt(dx * dx + dy * dy);    public readonly double Direction { get; } = Math.Atan2(dy, dx);}

二、集合表达式

在 Visual Studio 2022 版本 17.7 预览版 5 中引入。odA28资讯网——每日最新资讯28at.com

odA28资讯网——每日最新资讯28at.com

集合表达式引入了一种新的简洁语法,用于创建常用集合值。可以使用展开运算符(..)将其他集合内联到这些值中。odA28资讯网——每日最新资讯28at.com

1.下面的示例展示了集合表达式的用法:

// Create an arrayint[] array = [55, 99, 100, 33];// Create a listList<string> list = ["one", "two", "three", "five", "追逐时光者"];// Create a spanSpan<char> c = ['a', 'b', 'c', 'd', 'e', 'f', 'h', 'i', 'k'];// Create a jagged 2D arrayint[][] two2D = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [88, 8, 9]];

2.展开运算符(..)示例代码:

展开运算符(集合表达式中的 ..)可将其参数替换为该集合中的元素。 参数必须是集合类型。 以下示例演示了展开运算符的工作原理:odA28资讯网——每日最新资讯28at.com

int[] item0 = [88, 2, 3];int[] item1 = [22, 5, 6];int[] item2 = [7, 99, 9];int[] single = [.. item0, .. item1, .. item2];foreach (var element in single){    Console.Write($"{element}, ");}

没有.. 会有异常:odA28资讯网——每日最新资讯28at.com

odA28资讯网——每日最新资讯28at.com

正常输出:odA28资讯网——每日最新资讯28at.com

odA28资讯网——每日最新资讯28at.com

三、内联数组

在 Visual Studio 2022 版本 17.7 预览版 3 中引入。odA28资讯网——每日最新资讯28at.com

odA28资讯网——每日最新资讯28at.com

运行时团队和其他库作者使用内联数组来提高应用程序的性能。通过内联数组,开发人员可以在结构类型中创建固定大小的数组。具有内联缓冲区的结构体应具有与不安全固定大小缓冲区类似的性能特性。odA28资讯网——每日最新资讯28at.com

内联数组的声明与下面的结构类似:odA28资讯网——每日最新资讯28at.com

    [System.Runtime.CompilerServices.InlineArray(20)]    public struct Buffer    {        private int _element0;    }

你可以像使用其他数组一样使用它们:odA28资讯网——每日最新资讯28at.com

        public static void Test()        {            var buffer = new Buffer();            for (int i = 0; i < 20; i++)            {                buffer[i] = i;            }            foreach (var i in buffer)            {                Console.WriteLine(i);            }        }

四、Lambda 表达式中的可选参数

在 Visual Studio 2022 版本 17.5 预览版 2 中引入。odA28资讯网——每日最新资讯28at.com

odA28资讯网——每日最新资讯28at.com

可以为 Lambda 表达式的参数定义默认值。 语法和规则与将参数的默认值添加到任何方法或本地函数相同。odA28资讯网——每日最新资讯28at.com

如果 lambda 表达式只有一个输入参数,则括号是可选的:odA28资讯网——每日最新资讯28at.com

Func<double, double> cube = x => x * x * x;

两个或更多输入参数使用逗号加以分隔:odA28资讯网——每日最新资讯28at.com

Func<int, int, bool> testForEquality = (x, y) => x == y;

可以显式指定类型,如下面的示例所示:odA28资讯网——每日最新资讯28at.com

Func<int, string, bool> isTooLong = (int x, string s) => s.Length > x;

注意:输入参数类型必须全部为显式或全部为隐式;否则,便会生成 CS0748 编译器错误!!odA28资讯网——每日最新资讯28at.com

五、ref readonly参数

在 Visual Studio 2022 版本 17.8 预览版 2 中引入。odA28资讯网——每日最新资讯28at.com

odA28资讯网——每日最新资讯28at.com

ref readonly修饰符表示方法希望参数是一个变量,而不是一个非变量的表达式。不是变量的表达式包括常量、方法返回值和属性。如果参数不是变量,编译器会发出警告。odA28资讯网——每日最新资讯28at.com

六、任何类型的别名

在 Visual Studio 2022 版本 17.6 预览版 3 中引入。odA28资讯网——每日最新资讯28at.com

odA28资讯网——每日最新资讯28at.com

可以使用 using alias 指令来别名任何类型,而不仅仅是命名类型。也就是说,你可以为元组类型、数组类型、指针类型或其他不安全类型创建语义别名。odA28资讯网——每日最新资讯28at.com

使用 using 关键字为元组类型创建别名,并进行调用:odA28资讯网——每日最新资讯28at.com

using PointTest = (int x, int y);namespace Csharp12{    internal class Class1    {        public static void Test()        {            PointTest point = (10, 20);            Console.WriteLine($"Point coordinates: X={point.Item1}, Y={point.Item2}");        }    }}

七、Experimental属性

在 Visual Studio 2022 版本 17.7 预览版 3 中引入。odA28资讯网——每日最新资讯28at.com

odA28资讯网——每日最新资讯28at.com

可以使用 System.Diagnostics.CodeAnalysis.ExperimentalAttribute 来标记类型、方法或程序集,以指示实验性特征。 如果访问使用 ExperimentalAttribute 注释的方法或类型,编译器将发出警告。 用 Experimental 特性标记的程序集中包含的所有类型都是实验性的。odA28资讯网——每日最新资讯28at.com

示例代码:odA28资讯网——每日最新资讯28at.com

namespace Csharp12{    [AttributeUsage(System.AttributeTargets.Assembly | System.AttributeTargets.Class | System.AttributeTargets.Constructor | System.AttributeTargets.Delegate | System.AttributeTargets.Enum | System.AttributeTargets.Event | System.AttributeTargets.Field | System.AttributeTargets.Interface | System.AttributeTargets.Method | System.AttributeTargets.Module | System.AttributeTargets.Property | System.AttributeTargets.Struct)]    public class ExperimentalAttribute : Attribute    {        public ExperimentalAttribute()        {        }    }    [Experimental]    public class ExperimentalClass    {        public void DoSomething()        {            Console.WriteLine("Doing something experimental...");        }    }    internal class Class1    {        public static void Test()        {            ExperimentalClass exp = new ExperimentalClass();            exp.DoSomething();        }    }}

八、拦截器

预览功能在 Visual Studio 2022 版本 17.7 预览版 3 中引入。odA28资讯网——每日最新资讯28at.com

odA28资讯网——每日最新资讯28at.com

拦截器是一种方法,该方法可以在编译时以声明方式将对可拦截方法的调用替换为对其自身的调用。 通过让拦截器声明所拦截调用的源位置,可以进行这种替换。 拦截器可以向编译中(例如在源生成器中)添加新代码,从而提供更改现有代码语义的有限能力。odA28资讯网——每日最新资讯28at.com

注意:拦截器是一项试验性功能,在 C# 12 的预览模式下提供。 在将来的版本中,该功能可能会发生中断性变更或被删除。 因此,不建议将其用于生产或已发布的应用程序。odA28资讯网——每日最新资讯28at.com

odA28资讯网——每日最新资讯28at.com

要使用拦截器,用户项目必须指定 <InterceptorsPreviewNamespaces> 属性。这是允许包含拦截器的命名空间列表。odA28资讯网——每日最新资讯28at.com

<InterceptorsPreviewNamespaces>$(InterceptorsPreviewNamespaces);Microsoft.AspNetCore.Http.Generated;MyLibrary.Generated</InterceptorsPreviewNamespaces>

本文链接:http://www.28at.com/showinfo-26-84718-0.htmlC# 12 中新增的几大功能你都知道吗?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Meta如何将其缓存一致性提高至99.99999999

下一篇: 如何编写可读性高的 C/C++代码?

标签:
  • 热门焦点
  • Find N3入网:最高支持16+1TB

    OPPO将于近期登场的Find N3折叠屏目前已经正式入网,型号为PHN110。本次Find N3在外观方面相比前两代有很大的变化,不再是小号的横向折叠屏,而是跟别的厂商一样采用了较为常见的
  • 2023年Q2用户偏好榜:12+256G版本成新主流

    3月份的性能榜、性价比榜和好评榜之后,就要轮到2023年的第二季度偏好榜了,上半年的新机潮已经过去,最明显的肯定就是大内存和存储的机型了,另外部分中端机也取消了屏幕塑料支架
  • Automa-通过连接块来自动化你的浏览器

    1、前言通过浏览器插件可实现自动化脚本的录制与编写,具有代表性的工具就是:Selenium IDE、Katalon Recorder,对于简单的业务来说可快速实现自动化的上手工作。Selenium IDEKat
  • 三分钟白话RocketMQ系列—— 如何发送消息

    我们知道RocketMQ主要分为消息 生产、存储(消息堆积)、消费 三大块领域。那接下来,我们白话一下,RocketMQ是如何发送消息的,揭秘消息生产全过程。注意,如果白话中不小心提到相关代
  • 自律,给不了Keep自由!

    来源 | 互联网品牌官作者 | 李大为编排 | 又耳 审核 | 谷晓辉自律能不能给用户自由暂时不好说,但大概率不能给Keep自由。近日,全球最大的在线健身平台Keep正式登陆港交所,努力
  • 品牌洞察丨服务本地,美团直播成效几何?

    来源:17PR7月11日,美团App首页推荐位出现&ldquo;美团直播&rdquo;的固定入口。在直播聚合页面,外卖&ldquo;神枪手&rdquo;直播间、美团旅行直播间、美团买菜直播间等均已上线,同时
  • 东方甄选单飞:有些鸟注定是关不住的

    作者:彭宽鸿来源:华尔街科技眼&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;东方甄选创始人俞敏洪带队的&ldquo;7天甘肃行&rdquo;直播活动已在近日顺利收官。成立后一
  • 三星推出Galaxy Tab S9系列平板电脑以及Galaxy Watch6系列智能手表

    2023年7月26日,三星电子正式发布了Galaxy Z Flip5与Galaxy Z Fold5。除此之外,Galaxy Tab S9系列平板电脑以及三星Galaxy Watch6系列智能手表也同期
  • “买真退假” 这种“羊毛”不能薅

    □ 法治日报 记者 王春   □ 本报通讯员 胡佳丽  2020年初,还在上大学的小东加入了一个大学生兼职QQ群。群主&ldquo;七王&rdquo;在群里介绍一些刷单赚
Top