C#12新功能主构造函数:实用,简洁利落

这篇具有很好参考价值的文章主要介绍了C#12新功能主构造函数:实用,简洁利落。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

大家还记得记录(record)类型吗?记录类型很像一个构造函数,那么类可以像record类型一样使用吗?C#12就推出了这样的功能,这就是主构造函数。“现在可以在任何 classstruct 中创建主构造函数。主构造函数不再局限于 record 类型。主构造函数参数都在类的整个主体的范围内。为了确保显式分配所有主构造函数参数,所有显式声明的构造函数都必须使用 this() 语法调用主构造函数。将主构造函数添加到 class 可防止编译器声明隐式无参数构造函数。在struct中,隐式无参数构造函数初始化所有字段,包括 0 位模式的主构造函数参数。”下面将介绍主构造函数的语法和相关使用场景。

语法

当然要使用主构造函数必须是运行 .NET 8 或更高版本,包括 C# 12 或更高版本编译器。它的语法跟record类似。如下:

class ClassName(int a, string b)
{
    // 构造函数体
}

在这里,int astring b是主构造函数的参数。注意,参数列表直接跟在类名之后,使用括号括起。如果主构造函数不需要额外逻辑,甚至可以省略显式构造函数体。

同样,结构体也可以用类似的方式定义主构造函数,如下:

struct StructName(int a, string b)
{
    // 构造函数体
}

初始化属性

先来使用一下主构造函数初始化属性的案例。如下:

    public readonly struct calculate(double a, double b)
    {
        public readonly double  Add{ get; } =a+b;
        public readonly double Sub { get; } = a - b;
    }

以上代码演示了用于初始化计算的只读属性的主构造函数。 Add和 Sub的字段初始值设定项使用主构造函数参数。主构造函数参数不会在结构中的其他任何位置使用。前面的结构就像编写了以下代码一样:

   public readonly struct calculate
    {
        public readonly double  Add{ get; };
        public readonly double Sub { get; } ;
        public calculate(double a, double b)
        {
          Add= =a+b;
        }
    }

从上面的代码可以看出,第一种写法比第二种写法更简洁明了,可读性强。

依赖关系注入

依赖注入也是比较常用的语法,尤其是通过构造函数进行依赖关系的注入,下面我们通过主函数的方式实现控制台中的构造函数注入。代码如下:

    [ApiController]
    [Route("[controller]")]
    public class WeatherForecastController(ILogger<WeatherForecastController> logger) : ControllerBase
    {
        private readonly ILogger<WeatherForecastController> _logger=logger;
        [HttpGet(Name = "GetWeatherForecast")]
        public IEnumerable<WeatherForecast> Get()
        {
            logger.LogDebug("测试!");
            return null;
        }
    }

以上代码是改造asp.net core最小API的默认项目案例测试主构造函数,这样写的话代码简洁多了。

结语

主构造函数是 C# 12 引入的一个比较实用的新特性,为我们提供了更简洁和灵活的方式来定义类和结构体的构造函数。这一新特性将在日常开发中提高代码的可读性和开发效率。本文讲述了C#12的新特性主构造函数的语法以及依赖关系注入和初始化属性的案例,当然主构造函数还可以创建可变状态、初始化基类等,详情可以查看官网。大家觉得C#12的新特主构造函数实用吗?欢迎留言讨论或者吐槽。

参考:learn.microsoft.com/zh-cn/dotnet/csharp/whats-new/tutorials/primary-constructors文章来源地址https://www.toymoban.com/news/detail-777112.html


来源公众号:DotNet开发跳槽    

到了这里,关于C#12新功能主构造函数:实用,简洁利落的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 12、【装饰器模式】动态地为对象添加新功能

    你好,我是程序员雪球。 今天我们来聊聊 23 种设计模式中,一种常见的结构型模式,装饰器模式。聊聊它的设计思想、实现原理,应用场景,以及如何使用。     装饰器模式(Decorator Pattern)是一种结构型设计模式,它允许在不改变原始类的基础上,动态地为对象添加新的

    2024年04月29日
    浏览(29)
  • 今天新发布的nova12手机都有哪些新功能?

    12月26日,华为召开问界M9及华为冬季全场景发布会,正式推出了华为nova 12系列新品,并宣布新的三款nova产品正式加入先锋计划~我们一起看下这次华为nova12系列有那些看点亮点呢?首先这次nova12 ultra 配置很高啊,智能可变光圈,双向北斗卫星消息,智感支付、智能快充10分钟快

    2024年02月03日
    浏览(34)
  • C++11 新功能

    在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了C++98称为 C++11之前的最新C++标准名称。不过由于TC1主要是对C++98标准中的漏洞进行修复,语言的核心部分则没 有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。从C++0x到C++11,C+

    2023年04月12日
    浏览(37)
  • Java 20 新功能介绍

    Java 20 共带来 7 个新特性功能 ,其中三个是孵化提案,孵化也就是说尚在征求意见阶段,未来可能会删除此功能。 JEP 描述 分类 429 作用域值(孵化器) Project Loom,Java 开发相关 432 Record 模式匹配(第二次预览) Project Amber,新的语言特性 433 switch 的模式匹配(第四次预览)

    2024年02月03日
    浏览(47)
  • 【C++】C++11 -- 新功能

    在C++11之前一个类有6个默认成员函数,在C++11标准中又新增了两个默认成员函数,分别是移动构造函数和移动赋值函数 默认移动构造和移动赋值生成的条件 移动构造函数的生成条件:没有自己实现移动构造函数,并且没有自己实现析构函数,拷贝构造函数和拷贝赋值函数 移

    2024年02月17日
    浏览(33)
  • Midjourney新功能:角色参照指南

    基本概念 角色参照(Character Reference) :这个功能允许用户在不同的图像生成中保持给定参照角色的一致性。 适用模型 :适用于Midjourney V6和Niji6型号。 功能亮点 跨风格一致性 :可以在不同风格(如动漫风、写实风)中保持角色特征一致。 面部、着装、发型调控 :用户可以

    2024年04月10日
    浏览(48)
  • TypeScript 5.1发布,新功能更新

    1:返回类型增加undefined 这里设置了一个别名 fun,当时使用它的时候,我们必须显示返回一个 undefined 。 现在你可以直接设置返回类型: 而不仅限于 void any 。 4.3版本 :❌ 5.1版本 :✅ 2:getter可以设置和 setter 的不相关类型 在之前版本 ,get 返回类型应该为 set 的子类型,如

    2024年02月09日
    浏览(30)
  • SOLIDWORKS 2023新功能揭秘(一):3D CAD功能的十大更新

    SolidWorks 3D CAD  软件拥有设计、模拟、成本估算、可制造性检查、CAM、可持续设计和数据管理等功能,同时还包含适用于钣金,焊件,曲面,模具,产品配置,DFM和CAM的专业工具,支持ECAD/MCAD协作,复杂的零部件库以及高级真实感渲染。更重要的是具有结构和运动分析功能,

    2024年02月05日
    浏览(29)
  • 三星泄露微软 Copilot 新功能:用自然语言操控各种功能

    3 月 11 日消息,微软计划本月晚些时候发布新款 Surface 电脑和适用于 Windows 11 的 Copilot 新功能,但三星似乎等不及了,在其即将推出的 Galaxy Book4 系列产品宣传材料中泄露了一些即将到来的 Copilot 功能。 三星官网上发布的图片证实了此前关于微软正为其人工智能助手 Copilo

    2024年04月09日
    浏览(70)
  • 【C++】C++11类的新功能

    👀 樊梓慕: 个人主页  🎥 个人专栏: 《C语言》 《数据结构》 《蓝桥杯试题》 《LeetCode刷题笔记》 《实训项目》 《C++》 《Linux》 《算法》 🌝 每一个不曾起舞的日子,都是对生命的辜负 目录 前言 默认成员函数 类成员变量初始化 强制生成默认函数的default 禁止生

    2024年04月17日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包