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

一、主构造函数

在 Visual Studio 2022 版本 17.6 预览版 2 中引入。

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

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

  • 作为 base() 构造函数调用的参数。

  • 初始化成员字段或属性。

  • 引用实例成员中的构造函数参数。

代码示例

将任何参数放在类型名称后面的括号中:

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

以下代码初始化从主构造函数参数计算的两个只读属性:

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 中引入。

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

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

// Create an array
int[] array = [55, 99, 100, 33];

// Create a list
List<string> list = ["one", "two", "three", "five", "追逐时光者"];

// Create a span
Span<char> c = ['a', 'b', 'c', 'd', 'e', 'f', 'h', 'i', 'k'];

// Create a jagged 2D array
int[][] two2D = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [88, 8, 9]];

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

展开运算符(集合表达式中的 ..)可将其参数替换为该集合中的元素。参数必须是集合类型。以下示例演示了展开运算符的工作原理:

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}, ");
}

没有.. 会有异常:

正常输出:

三、内联数组

在 Visual Studio 2022 版本 17.7 预览版 3 中引入。

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

内联数组的声明与下面的结构类似:

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

你可以像使用其他数组一样使用它们:

        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 中引入。

可以为 Lambda 表达式的参数定义默认值。语法和规则与将参数的默认值添加到任何方法或本地函数相同。

如果 lambda 表达式只有一个输入参数,则括号是可选的:

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

两个或更多输入参数使用逗号加以分隔:

可以显式指定类型,如下面的示例所示:

注意:输入参数类型必须全部为显式或全部为隐式;否则,便会生成 CS0748 编译器错误!!

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

五、ref readonly参数

在 Visual Studio 2022 版本 17.8 预览版 2 中引入。

ref readonly修饰符表示方法希望参数是一个变量,而不是一个非变量的表达式。不是变量的表达式包括常量、方法返回值和属性。如果参数不是变量,编译器会发出警告。

六、任何类型的别名

在 Visual Studio 2022 版本 17.6 预览版 3 中引入。

可以使用 using alias 指令来别名任何类型,而不仅仅是命名类型。也就是说,你可以为元组类型、数组类型、指针类型或其他不安全类型创建语义别名。

使用 using 关键字为元组类型创建别名,并进行调用:

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 中引入。

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

示例代码:

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 中引入。

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

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

要使用拦截器,用户项目必须指定 <InterceptorsPreviewNamespaces> 属性。这是允许包含拦截器的命名空间列表。

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

文章转载自:追逐时光者

原文链接:https://www.cnblogs.com/Can-daydayup/p/18020222

体验地址:引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构

  • 30
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、唐网商城自助建站购物系统超漂亮版整合5套风格独特的模板:首次引入模板,以其强大的功能,首次增加模板更换管理功能,后台只须轻轻一点,整站风格即可瞬间更换,从此摆脱风格单一、枯燥的界面,每天给客户以新的感觉、新的享受! 二、全屏幕设计的流行风格:采用目前流行的全屏幕设计风格, 流行而时尚,独特且新颖!优美的外观设计、给用户以美的视觉冲击,这是您网店成功的第一步! 三、唐网商城自助建站购物系统超漂亮版,多元化设计,适合各行各业开店使用!增加诸如商品尺码、商品颜色等智能选择参数,对于需要这类功能的商家特别有利,配合整合的BBS论坛程序,用户帐号一站式通用! 四、新增强大的站点关键词设置及优化技术! 唐网商城自助建站购物系统超漂亮版具有大的关键词设置功能,整个网站可以设置其搜索关键词,同时单个商品的介绍页面均可以设置独立不同的关键词信息,同时经过优化过的版本在搜索引擎优化上有了更大的飞跃,绝大多数商品在各大搜索引擎的前排位置显示! 五、新增强大的后台权限管理;唐网商城自助建站购物系统超漂亮版增强大的后台管理员权限分配管理功能,后台的所有管理功能均可以通过权限管理进行设置,对于网店多个管理员的情况下非常适且,所有管理员之间均可以设置独立不同的管理权限,安全性更高! 六、具有强大的访问统计功能:唐网商城自助建站购物系统超漂亮版新增访问统计功能,包括总体数据统计、每日访问明细功能,具有完善的商城统计功能,可以对网站每日的访问人数以及访问页面进行详细的统计,给店主提供了最直接的参考依据! 七、唐网商城自助建站购物系统超漂亮版已经加入了积分换算、奖品功能,兑换功能,预存款与积分可以相互兑换,并可以用积分购买站内奖品。 八、支持非会员匿名购物功能:唐网商城自助建站购物系统超漂亮版目前支持会员/非会员,即匿名用户直接购买商品并下订单功能,用户无须注册即可购买商品,有利于商城商品的销售。 九、支持多种在线支付方式:唐网商城自助建站购物系统超漂亮版支持多种网上在线支付,包括:北京网银、支付宝、北京云网、NPS、快钱、西部支付等6种在线支付接口,管理员后台可以自由切换使用,非常方便! 十、同类商品推荐功能:唐网商城自助建站购物系统超漂亮版版商品详细介绍页面均增加了同类商品推荐功能,即打开页面的商品的同一类别的其他商品的推荐功能,这样更加利于用户的查找与购买,非常方便! 十一、商品分类菜单显示扩充为2种:唐网商城自助建站购物系统超漂亮版新增商品分类的伸缩菜单功能,后台可以切换使用,默认的是展开式效果,对于商品分类较多的用户,可以采用伸缩式菜单显示的方式,使版面更加美观,使用上更加灵活! 十二、最有强大的站内支付功能:唐网商城自助建站购物系统超漂亮版新增站内快速支付功能,用户可以给管理员实时在线支付款额,可由用户填写并提交到网上进行支付,对于需要快速支付的商家非常实用! 十三、采用最为流行的支付宝接口:唐网商城自助建站购物系统超漂亮版采用最新的支付宝接口,可以对支付宝的送货费用详细设计,同时新的支付宝功能支持付款到支付宝和采用即时到帐交易2种方式,非常方便商家的销售。 十四、灵活的在线支付方式设置功能:唐网商城自助建站购物系统超漂亮版版所集成的多种在线支付方式,后台可以轻松开启/关闭在线支付。同时支付宝功能也可以轻松开启或关闭。对于不需要在线支付的商家非常有利。 十五、耳目一新的商品分类界面:唐网商城自助建站购物系统超漂亮版采用全屏幕设计风格,商品图片显示逼真,商品分类界面制作精美,给客户以美的视觉享受,有利于用户的购买欲望。 十六、整合eWebedit编辑器:唐网商城自助建站购物系统超漂亮版程序整合了ewebedit编辑器,添加商品/新闻/资讯时更容易。 十七、会员积分/预存款购物功能:程序支持会员功能;会员可以有预存款,并可以通过预存款直接购买商品。 十八、站内短信联系功能:唐网商城自助建站购物系统超漂亮版的站内短信功能非常实用,商城用户可以与管理员通过互发站内短信沟通和联系,有利于与用户的近一步沟通。 十九、完善的广告管理形式:唐网商城自助建站购物系统超漂亮版版的广告管理位很多,所有广告图片内容均可以直接在线上传管理。 二十、采用流行的Flash 广告切换形式。商城已经整合了目前流行的Flash广告滚动效果,管理员在后台只须上传广告图片,前台会自动生成各式各样的FLASH动态效果,给用户以美的视觉冲击。 二一、商品评论、留言功能:用户可以对商品发表评论、管理员并可以对评论进行回复或点评。唐网商城自助建站购物系统超漂亮版的留言本可以允许用户在这里发表看法、购买感受以及与管理员近一步的沟通。 二二、新增站内邮件订阅功能新增的站内邮件订阅功能可以搜索用户填写的EMAIL地址,具有订阅和退订的双重功能,管理员可

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值