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

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

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

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

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

一、主构造函数

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

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

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

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

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

2.代码示例

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

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

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

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

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

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

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

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

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

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

三、内联数组

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

五、ref readonly参数

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

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

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

六、任何类型的别名

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

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

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

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

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

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

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

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

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

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

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

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

标签:
  • 热门焦点
  • 鸿蒙OS 4.0公测机型公布:甚至连nova6都支持

    华为全新的HarmonyOS 4.0操作系统将于今天下午正式登场,官方在发布会之前也已经正式给出了可升级的机型产品,这意味着这些机型会率先支持升级享用。这次的HarmonyOS 4.0支持
  • 6月安卓手机性价比榜:Note 12 Turbo断层式碾压

    6月份有一个618,虽然这是京东周年庆的日子,但别的电商也都不约而同的跟进了,反正促销没坏处,厂商和用户都能满意。618期间一些产品也出现了历史低价,那么各个价位段的产品性价比
  • K6:面向开发人员的现代负载测试工具

    K6 是一个开源负载测试工具,可以轻松编写、运行和分析性能测试。它建立在 Go 和 JavaScript 之上,它被设计为功能强大、可扩展且易于使用。k6 可用于测试各种应用程序,包括 Web
  • 企业采用CRM系统的11个好处

    客户关系管理(CRM)软件可以为企业提供很多的好处,从客户保留到提高生产力。  CRM软件用于企业收集客户互动,以改善客户体验和满意度。  CRM软件市场规模如今超过580
  • 十个简单但很有用的Python装饰器

    装饰器(Decorators)是Python中一种强大而灵活的功能,用于修改或增强函数或类的行为。装饰器本质上是一个函数,它接受另一个函数或类作为参数,并返回一个新的函数或类。它们通常用
  • 三万字盘点 Spring 九大核心基础功能

    大家好,我是三友~~今天来跟大家聊一聊Spring的9大核心基础功能。话不多说,先上目录:图片友情提示,本文过长,建议收藏,嘿嘿嘿!一、资源管理资源管理是Spring的一个核心的基础功能,不
  • 慕岩炮轰抖音,百合网今何在?

    来源:价值研究所 作者:Hernanderz&ldquo;难道就因为自己的一个产品牛逼了,从客服到总裁,都不愿意正视自己产品和运营上的问题,选择逃避了吗?&rdquo;这一番话,出自百合网联合创
  • iQOO 11S或7月上市:搭载“鸡血版”骁龙8Gen2 史上最强5G Soc

    去年底,iQOO推出了“电竞旗舰”iQOO 11系列,作为一款性能强机,iQOO 11不仅全球首发2K 144Hz E6全感屏,搭载了第二代骁龙8平台及144Hz电竞屏,同时在快充
  • 外交部:美方应停止在网络安全问题上不负责任地指责他国

      中国外交部今天(16日)举行例行记者会。会上,有记者问,美国情报官员称,他们正在阻拦来自中国以及其他国家的黑客获取相关科研成果。 中方对此有何评论?对此
Top