盘点C# 9.0中好用的特性

这篇具有很好参考价值的文章主要介绍了盘点C# 9.0中好用的特性。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

顶级语句

将类和类里面Main函数省略,只留下核心的逻辑代码就是顶级语句!

1.顶级语句1

await System.Threading.Tasks.Task.Delay(1000);
System.Console.WriteLine("Hi!");
return 0;
static class $Program
{
    static async Task<int> $Main(string[] args)
    {
        await System.Threading.Tasks.Task.Delay(1000);
        System.Console.WriteLine("Hi!");
        return 0;
    }
}

1.顶级语句2

System.Console.WriteLine("Hi!");
return 2;
static class $Program
{
    static int $Main(string[] args)
    {
        System.Console.WriteLine("Hi!");
        return 2;
    }
}

Init

struct Point
{
    public int X { get; }
    public int Y { get; }

    public Point(int x, int y)
    {
        this.X = x;
        this.Y = y;
    }
}

init通过允许调用方在构造操作过程中改变成员,访问器使不可变对象更具灵活性。 这意味着对象的不可变属性可以参与对象初始值设定项,因此不再需要类型中的所有构造函数样板。 Point类型现在只是:

struct Point
{
    public int X { get; init; }
    public int Y { get; init; }
}

然后,使用者可以使用对象初始值设定项来创建对象。

var p = new Point() { X = 42, Y = 13 };

记录

记录类型是引用类型,类似于类声明。 如果不包含,记录将提供一个错误 record_base argument_list record_declaration parameter_list 。 部分记录最多只能有一个分部类型声明提供 parameter_list 。
记录参数不能 ref 使用 out 或 this 修饰符 (但 in params 允许) 。

继承

除非类为 object ,且类不能从记录继承,否则记录不能从类继承。 记录可以继承自其他记录。

 public record Student(string name,int age) {
 }
using System;
using System.Collections.Generic;

public class Student : IEquatable<Student>
    {
        #region 属性这部分 可以看到set属性没有
        #记录具有不可变性,记录一旦初始化完成,那么它的属性值将不可修改(可以通过反射修改)
        public string Name { get; init; }
        public int Age { get; init; }
        #endregion

        #region
        protected virtual Type EqualityContract => typeof(Student);
        #endregion
      
        public override bool Equals(object? obj) => Equals(obj as R1);
        public virtual bool Equals(Student? other)
        {
            return !(other is null) &&
                EqualityContract == other.EqualityContract &&
                
                EqualityComparer<string>.Default.Equals(this.Name, other.Name) &&
                EqualityComparer<int>.Default.Equals(this.Age, other.Age);
        }
        public static bool operator ==(R1? left, R1? right)
            => (object)left == right || (left?.Equals(right) ?? false);
        public static bool operator !=(R1? left, R1? right)
            => !(left == right);

         public override string ToString()
        {
            StringBuilder builder = new StringBuilder();
            builder.Append("Student");
            builder.Append(" { ");
            if (this.PrintMembers(builder))
            {
                builder.Append(" ");
            }
            builder.Append("}");
            return builder.ToString();
        }
    }

支持解构

public record Student(string Name, int Age) {
        public string Name { get; set; }
        public int Age { get; set; }
}
Student record = new Student("张三",19) ;
var (name, age) = record;

==》这个可以用在switch匹配上 还记得我们
string value = record switch{
                ("张三", 19) => "01",
                ("李四", 25) => "02",
                _ => "default"
 };

## 之所以可以用这个这么用 是因为编译后多了这样的解构函数
 public void Deconstruct(out string Name, out int Age) => (Name, Age) = (this.Name, this.Age);

with 表达式

with表达式是使用以下语法的新表达式。

Student record2  = record with { Name = "王五" };

//在编译后等价于
var temp = record.<Clone>$();
temp.Name = "王五";
record2 = temp;

//不赋值 完全克隆
Student record3  = record with { };

好处:

1.比较两个属性是否相等跟属性设置的顺序无关
2.方便快速克隆,不影响原数据
3.补充了结构体不支持继承以及性能不高的短处

Lambda 弃元参数

允许丢弃 (用作 _ lambda 和匿名方法的参数) 。 例如:文章来源地址https://www.toymoban.com/news/detail-421727.html

  • lambda: (_, _) => 0 , (int _, int _) => 0
  • 匿名方法: delegate(int _, int _)
public delegate void FuncA(string a, string c);

        static void Main(string[] args)
        {

            FuncA func = (_, _) => { };

        }

到了这里,关于盘点C# 9.0中好用的特性的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 国内开源好用商城盘点—PHP

    近年来,随着互联网技术的发展,电子商务的兴起,越来越多的企业选择建立自己的电子商务网站,满足客户的需求。由于PHP语言的开源性,越来越多的开发者投入到PHP开发中,也出现了许多优秀的PHP开源商城系统。 PHP是一种脚本语言,它具有易于安装和使用的特点,可以快

    2024年02月11日
    浏览(52)
  • 盘点ai写作工具:三个好用的ai写作工具

    在需要大量文本内容的场合中,ai写作软件是一种非常便利和实用的工具。无论是写作工具、营销推广、新闻媒体还是内容创作,都可以通过使用该软件提高工作效率和质量,节省时间和精力。有时候我们需要的是根据标题来写文字,那这个时候,ai根据标题写文字要怎么弄呢

    2024年02月09日
    浏览(53)
  • 10款好用的AI生成PPT软件盘点,干货建议收藏!

    作为一名学生或职场人,你是否在PPT幻灯片上花费了大量的时间? 一个好消息是,随着AI技术与各种办公软件的结合,是时候摆脱PPT的束缚,拥抱更愉快的幻灯片制作体验了! 在这篇文章中,我们盘点了 2023年10款好用的AI生成PPT软件 ,可帮助你在几秒钟内生成一份美观的P

    2024年02月03日
    浏览(142)
  • 盘点好用的API管理软件,API管理开发工具Postman

    Postman是一款简单高效的api管理开发工具,你可以在组织良好的图形用户界面中管理,组织和测试API,并加速新应用程序的开发。Postman破解版为您提供了为API创建和组织HTTP请求的可能性,同时还集成了测试功能。您可以创建自定义方案并以简化的方式分析API响应。而且由于云

    2023年04月08日
    浏览(39)
  • 什么牌子台灯好用不伤眼睛?盘点国内值得入手的护眼灯

    选择一款不伤眼睛的台灯主要看光照柔和、光照范围广,符合标准照度国A或国AA、显色指数Ra90以上、无眩光、RG0无危害蓝光、无可视频闪等,对于现在许多青少年的近视率增加,一旦近视就无法恢复,保护好眼睛,在学习阅读时,开启护眼台灯能起到一定的护眼作用。 Top1

    2023年04月25日
    浏览(52)
  • 盘点| 有哪些比较新的好用的React Native 开发工具?

    2015年,FaceBook首次开发并发布React Native框架,用于构建原始的移动应用程序。React Native的特点是使用JavaScript和React编写应用程序代码,而不是其他移动应用程序开发框架,同时利用iOS和Android平台的原始组件和API,从而实现更快、更有效的开发流程。今天就来跟大家分享 Reac

    2023年04月24日
    浏览(46)
  • 手机上好用的python编辑器,手机能用的python编辑器

    大家好,本文将围绕手机软件编辑器中文版python展开说明,手机上好用的python编辑器是一个很多人都想弄明白的事情,想搞清楚手机能用的python编辑器需要先了解以下几个事情。 前言 现在越来越多人学习python,很多小伙伴都富有激情的,利用碎片化的时间都要学习,小编不

    2024年01月16日
    浏览(56)
  • 超好用的特性:Stream 流

    JDK 8引入了Stream API,它是Java中处理集合数据的一种新方式。Stream流提供了一种更简洁、更灵活的方式来对集合进行操作和处理。 Stream流可以看作是一种高级的迭代器,它可以对集合中的元素进行过滤、映射、排序、聚合等操作,而不需要显式地使用循环。这样可以使代码更

    2024年02月09日
    浏览(35)
  • C++核心编程—类和对象,类的三大特性——封装、继承、多态

    纵有疾风起,人生不言弃。本文篇幅较长,如有错误请不吝赐教,感谢支持。 ①什么是对象? 生活中有各种各样的 事物 ,如人、动物、植物等在C++中将这些称为对象。 对象多种多样, 各种对象的属性也不相同 。 例如狗的品种,毛色,年龄等 各个对象都有自己的行为 ,例

    2024年02月07日
    浏览(64)
  • C#几种截取字符串的方法盘点

    C#几种截取字符串的方法小结,需要的朋友可以参考一下 1.根据单个分隔字符用split截取 例如 代码如下: string st=\\\"GT123_1\\\"; string[] sArray=st.split(\\\"_\\\"); 即可得到sArray[0]=\\\"GT123\\\",sArray[1]=\\\"1\\\"; 2.利用多个字符来分隔字符串 例如 代码如下: string str = \\\"GTAZB_JiangjBen_123\\\"; string[] sArray = str.Split(ne

    2024年02月11日
    浏览(39)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包