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

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

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

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

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

一、主构造函数

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

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

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

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

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

2.代码示例

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

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

以下代码初始化从主构造函数参数计算的两个只读属性:wgD28资讯网——每日最新资讯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 中引入。wgD28资讯网——每日最新资讯28at.com

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

集合表达式引入了一种新的简洁语法,用于创建常用集合值。可以使用展开运算符(..)将其他集合内联到这些值中。wgD28资讯网——每日最新资讯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.展开运算符(..)示例代码:

展开运算符(集合表达式中的 ..)可将其参数替换为该集合中的元素。 参数必须是集合类型。 以下示例演示了展开运算符的工作原理:wgD28资讯网——每日最新资讯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}, ");}

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

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

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

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

三、内联数组

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

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

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

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

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

你可以像使用其他数组一样使用它们:wgD28资讯网——每日最新资讯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 中引入。wgD28资讯网——每日最新资讯28at.com

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

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

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

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

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

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

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

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

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

五、ref readonly参数

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

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

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

六、任何类型的别名

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

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

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

使用 using 关键字为元组类型创建别名,并进行调用:wgD28资讯网——每日最新资讯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 中引入。wgD28资讯网——每日最新资讯28at.com

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

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

示例代码:wgD28资讯网——每日最新资讯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 中引入。wgD28资讯网——每日最新资讯28at.com

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

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

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

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

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

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

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

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

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

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

标签:
  • 热门焦点
  • 对标苹果的灵动岛 华为带来实况窗功能

    对标苹果的灵动岛 华为带来实况窗功能

    继苹果的灵动岛之后,华为也在今天正式推出了“实况窗”功能。据今天鸿蒙OS 4.0的现场演示显示,华为的实况窗可以更高效的展现出实时通知,比如锁屏上就能看到外卖、打车、银行
  • 6月安卓手机好评榜:魅族20 Pro蝉联冠军

    6月安卓手机好评榜:魅族20 Pro蝉联冠军

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年6月1日至6月30日,仅限国内市场。第一名:魅族20 Pro好评率:95%5月份的时候魅族20 Pro就是
  • WebRTC.Net库开发进阶,教你实现屏幕共享和多路复用!

    WebRTC.Net库开发进阶,教你实现屏幕共享和多路复用!

    WebRTC.Net库:让你的应用更亲民友好,实现视频通话无痛接入! 除了基本用法外,还有一些进阶用法可以更好地利用该库。自定义 STUN/TURN 服务器配置WebRTC.Net 默认使用 Google 的
  • 重估百度丨“晚熟”的百度云,能等到春天吗?

    重估百度丨“晚熟”的百度云,能等到春天吗?

    &copy;自象限原创作者|程心排版|王喻可2016年7月13日,百度云计算战略发布会在北京举行,宣告着百度智能云的正式启程。彼时的会场座无虚席,甚至排队排到了门外,在场的所有人几乎都
  • 自律,给不了Keep自由!

    自律,给不了Keep自由!

    来源 | 互联网品牌官作者 | 李大为编排 | 又耳 审核 | 谷晓辉自律能不能给用户自由暂时不好说,但大概率不能给Keep自由。近日,全球最大的在线健身平台Keep正式登陆港交所,努力
  • ESG的面子与里子

    ESG的面子与里子

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之三伏大幕拉起,各地高温预警不绝,但处于厄尔尼诺大&ldquo;烤&rdquo;之下的除了众生,还有各大企业发布的ESG报告。ESG是&ldquo;环境保
  • 小米MIX Fold 3下月亮相:今年唯一无短板的全能折叠屏

    小米MIX Fold 3下月亮相:今年唯一无短板的全能折叠屏

    这段时间以来,包括三星、一加、荣耀等等有不少品牌旗下的最新折叠屏旗舰都有新的进展,其中荣耀、三星都已陆续发布了最新的折叠屏旗舰,尤其号荣耀Magi
  • 苹果公司要求三星和LG Display生产「无边框」OLED iPhone显示屏

    苹果公司要求三星和LG Display生产「无边框」OLED iPhone显示屏

    据 The Elec 报道,苹果已要求其供应商为未来的 iPhone 型号开发「无边框」OLED 显示面板。苹果显然已要求三星和 LG Display 开发新的 OLED 显示面
  • 2022爆款:ROG魔霸6 冰川散热系统持续护航

    2022爆款:ROG魔霸6 冰川散热系统持续护航

    喜逢开学季,各大商家开始推出自己的新产品,进行打折促销活动。对于忠实的端游爱好者来说,能够拥有一款梦寐以求的笔记本电脑是一件十分开心的事。但是现在的
Top
Baidu
map