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

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

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

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

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

一、主构造函数

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

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

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

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

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

2.代码示例

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

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

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

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

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

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

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

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

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

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

三、内联数组

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

五、ref readonly参数

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

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

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

六、任何类型的别名

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

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

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

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

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

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

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

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

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

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

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

要使用拦截器,用户项目必须指定 <InterceptorsPreviewNamespaces> 属性。这是允许包含拦截器的命名空间列表。xvZ28资讯网——每日最新资讯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++代码?

标签:
  • 热门焦点
  • 小米平板5 Pro 12.4简评:多专多能 兼顾影音娱乐的大屏利器

    疫情带来了网课,网课盘活了安卓平板,安卓平板市场虽然中途停滞了几年,但好的一点就是停滞的这几年行业又有了新的发展方向,例如超窄边框、高刷新率、多摄镜头组合等,这就让安卓
  • 一年经验在二线城市面试后端的经验分享

    忠告这篇文章只适合2年内工作经验、甚至没有工作经验的朋友阅读。如果你是2年以上工作经验,请果断划走,对你没啥帮助~主人公这篇文章内容来自 「升职加薪」星球星友 的投稿,坐
  • 一篇聊聊Go错误封装机制

    %w 是用于错误包装(Error Wrapping)的格式化动词。它是用于 fmt.Errorf 和 fmt.Sprintf 函数中的一个特殊格式化动词,用于将一个错误(或其他可打印的值)包装在一个新的错误中。使
  • 让我们一起聊聊文件的操作

    文件【1】文件是什么?文件是保存数据的地方,是数据源的一种,比如大家经常使用的word文档、txt文件、excel文件、jpg文件...都是文件。文件最主要的作用就是保存数据,它既可以保
  • 19个 JavaScript 单行代码技巧,让你看起来像个专业人士

    今天这篇文章跟大家分享18个JS单行代码,你只需花几分钟时间,即可帮助您了解一些您可能不知道的 JS 知识,如果您已经知道了,就当作复习一下,古人云,温故而知新嘛。现在,我们就开始今
  • 梁柱接棒两年,腾讯音乐闯出新路子

    文丨田静 出品丨牛刀财经(niudaocaijing)7月5日,企鹅FM发布官方公告称由于业务调整,将于9月6日正式停止运营,这意味着腾讯音乐长音频业务走向消亡。腾讯在长音频领域还在摸索。为
  • 一条抖音4亿人围观 ! 这家MCN比无忧传媒还野

    作者:Hiu 来源:互联网品牌官01 擦边少女空降热搜,幕后推手曝光被网友誉为&ldquo;纯欲天花板&rdquo;的女网红井川里予,近期因为一组哥特风照片登上热搜,引发了一场互联网世界关于
  • 华为开发者大会2023日程公开:开设鸿蒙HarmonyOS 4体验区

    IT之家 7 月 31 日消息,华为今日公布了 HDC.Together 开发者大会 2023 的详细日程。整场大会将于 8 月 4 日-6 日之间举行,届时将发布最新一代鸿蒙 H
  • 荣耀Magicbook V 14 2021曙光蓝版本正式开售,拥有触摸屏

    荣耀 Magicbook V 14 2021 曙光蓝版本正式开售,搭载 i7-11390H 处理器与 MX450 显卡,配备 16GB 内存与 512GB SSD,重 1.48kg,厚 14.5mm,具有 1.5mm 键盘键程、
Top