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

关于 C# 12 新增功能实操!

来源: 责编: 时间:2024-07-25 16:38:57 317观看
导读今天咱们一起来探索并实践 C# 12 引入的全新功能!注意:使用这些功能需要使用最新的 Visual Studio 2022 版本或安装 .NET 8 SDK 。主构造函数主构造函数允许你直接在类定义中声明构造函数参数,并自动生成相应的属性。主

今天咱们一起来探索并实践 C# 12 引入的全新功能!A5528资讯网——每日最新资讯28at.com

注意:使用这些功能需要使用最新的 Visual Studio 2022 版本或安装 .NET 8 SDK 。A5528资讯网——每日最新资讯28at.com

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

主构造函数

主构造函数允许你直接在类定义中声明构造函数参数,并自动生成相应的属性。A5528资讯网——每日最新资讯28at.com

主构造函数参数的最常见用途包括:A5528资讯网——每日最新资讯28at.com

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

代码示例

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

    public class CSharp12GrammarExercise    {        public static void OutputPrint()        {            var person = new Person("追逐时光者", 30);            Console.WriteLine($"{person.Name}, {person.Age}");        }    }    public class Person(string name, int age)    {        public string Name => name;        public int Age => age;    }

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

    public class CSharp12GrammarExercise    {        public static void OutputPrint()        {            // 创建 Distance 结构体实例            Distance distance = new Distance(10, 55);            // 访问 Magnitude 和 Direction 属性            Console.WriteLine($"Magnitude: {distance.Magnitude},Direction: {distance.Direction}");        }    }    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);    }

集合表达式

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

(1) 下面的示例展示了集合表达式的用法:A5528资讯网——每日最新资讯28at.com

        public static void CollectionExpressions()        {            // 创建一个数组            int[] array = [55, 99, 100, 33];            // 创建一个列表            List<string> list = ["one", "two", "three", "five", "追逐时光者"];            // 创建一个 Span            Span<char> span = ['a', 'b', 'c', 'd', 'e', 'f', 'h', 'i', 'k'];            // 创建一个交错二维数组            int[][] two2D = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [88, 8, 9]];        }

(2) 展开运算符(..)示例代码:A5528资讯网——每日最新资讯28at.com

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

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

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

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

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

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

内联数组

内联数组用于提高应用程序性能,允许在结构体中创建固定大小的数组。虽然你可能不会自己声明内联数组,但当它们通过 System.Span<T> 或 System.ReadOnlySpan<T> 从运行时 API 暴露出来时,你可以透明地使用它们。内联数组提供与不安全固定大小缓冲区类似的性能特性。A5528资讯网——每日最新资讯28at.com

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

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

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

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

默认 lambda 参数

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

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

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

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

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

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

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

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

任何类型的别名

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

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

using PointTest = (int item1, int item2);namespace HelloDotNetGuide.CSharp语法{    public class CSharp12GrammarExercise    {        public static void OutputPrint()        {            //使用 using 关键字为元组类型创建别名,并进行调用:            PointTest point = (10, 20);            Console.WriteLine($"输出:Item1={point.Item1}, Item2={point.Item2}");        }    }}

参考文章

  • 详细功能介绍请阅读微软官方文档:https://learn.microsoft.com/zh-cn/dotnet/csharp/whats-new/csharp-12
  • 文章示例源码地址:https://github.com/YSGStudyHards/DotNetGuide/blob/main/DotNetGuidePractice/HelloDotNetGuide/CSharp%E8%AF%AD%E6%B3%95/CSharp12GrammarExercise.cs

本文链接:http://www.28at.com/showinfo-26-103571-0.html关于 C# 12 新增功能实操!

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

上一篇: 缓存框架 Caffeine 的可视化探索与实践

下一篇: 干货 | 携程IT桌面全链路工具研发运营实践

标签:
  • 热门焦点
  • 一加Ace2 Pro官宣:普及16G内存 引领24G

    一加官方今天继续为本月发布的新机一加Ace2 Pro带来预热,公布了内存方面的信息。“淘汰 8GB ,12GB 起步,16GB 普及,24GB 引领,还有呢?#一加Ace2Pro#,2023 年 8 月,敬请期待。”同时
  • 卢伟冰长文解析K60至尊版 对Redmi有着里程碑式的意义

    在今天的Redmi后性能时代战略发布会结束之后,Redmi总经理卢伟冰又带来了一篇长文,详解了为什么 Redmi 要开启后性能时代?为什么选择和 MediaTek、Pixelworks 深度合作?以及后性
  • 小米官宣:2023年上半年出货量中国第一!

    今日早间,小米电视官方微博带来消息,称2023年小米电视上半年出货量达到了中国第一,同时还表示小米电视的巨屏风暴即将开始。“公布一个好消息2023年#小米电视上半年出货量中国
  • 直屏旗舰来了 iQOO 12和K70 Pro同台竞技

    旗舰机基本上使用的都是双曲面屏幕,这就让很多喜欢直屏的爱好者在苦等一款直屏旗舰,这次,你们等到了。据博主数码闲聊站带来的最新爆料称,Redmi下代旗舰K70 Pro和iQOO 12两款手
  • Python异步IO编程的进程/线程通信实现

    这篇文章再讲3种方式,同时讲4中进程间通信的方式一、 Python 中线程间通信的实现方式共享变量共享变量是多个线程可以共同访问的变量。在Python中,可以使用threading模块中的L
  • 使用AIGC工具提升安全工作效率

    在日常工作中,安全人员可能会涉及各种各样的安全任务,包括但不限于:开发某些安全工具的插件,满足自己特定的安全需求;自定义github搜索工具,快速查找所需的安全资料、漏洞poc、exp
  • 最“俊美”淘宝卖家,靠直播和短视频圈粉,上架秒光,年销3000万

    来源 | 电商在线文|易琬玉编辑|斯问受访店铺:Ringdoll戒之人形图源:微博@御座的黄山、&ldquo;Ringdoll戒之人形&rdquo;淘宝店铺有关外貌的评价,黄山已经听累了。生于1985年的他,哪
  • 腾讯VS网易,最卷游戏暑期档,谁能笑到最后?

    作者:无锈钵来源:财经无忌7月16日晚,上海1862时尚艺术中心。伴随着幻象的精准命中,硕大的荧幕之上,比分被定格在了14:12,被寄予厚望的EDG战队以绝对的优势战胜了BLG战队,拿下了总决
  • 自研Exynos回归!三星Galaxy S24系列将提供Exynos和骁龙双版本

    年初,全新的三星Galaxy S23系列发布,包含Galaxy S23、Galaxy S23+和Galaxy S23 Ultra三个版本,全系搭载超频版骁龙8 Gen 2,虽同样采用台积电4nm工艺制
Top