.NET6新特新 struct优化

 更新时间:2021年11月22日 16:37:45   作者:494324190  
这篇文章主要给大家分享的是 NET6新特新 struct优化,在.NET6中针对Struct做了一些优化,下面我们就通过一些案例来看一下.NET6中针对Struct的优化,需要的朋友可以参考一下,希望对大家有所帮助

在.NET6中针对Struct做了一些优化,下面我们就通过一些案例来看一下.NET6中针对Struct的优化。

一、Record Struct

虽然在上一个版本中就有了record,但是上一版本中的的recordclass是一个引用类型,但是record struct是值类型是一个结构,

它的使用方式如下:

record struct Point(int X, int Y);

.NET6中也支持record来声明一个基于classrecord,这和原来的record是一样的,例如​ ​record class RecordModel(int Id, string Name) ​​`​ ​这和 ​​`​ ​record RecordModel(int Id, string Name)​​ record struct会自动生成Equals和GetHashCode并重写==和!=操作符,并且可以用with修改部分属性创建新的对象。如果record struct声明有参数构造器,则会生成一个隐式的无参构造。

代码如下:     

var p1 = new Point(1, 2);

var p2 = p with { X = 2 };

Console.WriteLine(p1);

Console.WriteLine(p2);

Console.WriteLine(new Point());

运行上述代码可以看到即使没有显式声明无参构造还是会生成一个无参构造来初始化。

上述代码输出如下:

Point { X = 1, Y = 2 }

Point { X = 2, Y = 2 }

Point { X = 0, Y = 0 }

二、readonly struct record

我们可以使用readonly来标记结构体,也可以使用readonly struct record,但record struct不能使用ref修饰。使用readonly struct record声明的结构体,如果使用Primary Constructor对应的属性会是init。例如​ ​readonly record struct Point(int X, int Y);​​

属性的声明是这样的:

internal readonly struct Point : IEquatable

{

  public int X { get; init; }

  public int Y { get; init; }

  public Point(int X, int Y)

  {

  this.X = X;

  this.Y = Y;

  }

}

三、Parameterless Constructor

.NET6支持用户自定义无参构造方法,我们可以在无参构造方法中加入初始化逻辑,

代码如下如下:

Console.WriteLine(new Point1().ToString());

Console.WriteLine(default(Point1).ToString());

Console.WriteLine(Activator.CreateInstance());

struct Point1

{

    public int X { get; set; }

    public int Y { get; set; }

    private int Z { get; set; }

    public Point1()

    {

        X = 1;

        Y = 2;

        Z = 3;

    }

    public override string ToString()

    {

        return $"{X}_{Y}_{Z}";

    }

}

这里需要注意defaultnew的差别,default是结构体空状态,不会执行无参构造,new是会执行,通过反射创建对象的时候也会执行构造,

代码输出结果如下:

1_2_3

0_0_0

1_2_3

除了record之外,.NET6还扩展了with表达式用法,普通结构体和匿名对象也可以使用with来修改部分属性

代码如下:

Console.WriteLine((new Point1() with { X = 2 }).ToString());

Console.WriteLine();

var obj = new

{

    X = 1,

    Y = 1

};

Console.WriteLine(JsonSerializer.Serialize(obj));

Console.WriteLine(JsonSerializer.Serialize(obj with { X = 3, Y = 3 }));

输出结果如下:

2_2_3

{"X":1,"Y":1}

{"X":3,"Y":3}

with只能对public成员进行操作,上面代码中的Z是private,因此在with表达式中是不能指定。 和record class相比record struct没有 Clone 方法,因为struct不需要自带Clone功能,record struct不允许声明Clone成员方法,所有record都不允许声明Clone 成员。

到此这篇关于 NET6新特新 struct优化的文章就介绍到这了,更多相关 NET6 struct优化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 水晶易表调用C#的WebService,返回数据集合的应用分析

    水晶易表调用C#的WebService,返回数据集合的应用分析

    本篇文章介绍了,水晶易表调用C#的WebService,返回数据集合的应用分析。需要的朋友参考下
    2013-04-04
  • .NET新能源汽车锂电池检测程序UI挂死问题分析

    .NET新能源汽车锂电池检测程序UI挂死问题分析

    这篇文章主要为大家介绍了.NET新能源汽车锂电池检测程序UI挂死问题分析 ,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • .NET 中配置从xml转向json方法示例详解

    .NET 中配置从xml转向json方法示例详解

    这篇文章主要为大家介绍了.NET 中配置从xml转向json方法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • ADO.NET实用技巧两则

    ADO.NET实用技巧两则

    ADO.NET实用技巧两则...
    2006-07-07
  • .NET6新特新 struct优化

    .NET6新特新 struct优化

    这篇文章主要给大家分享的是 NET6新特新 struct优化,在.NET6中针对Struct做了一些优化,下面我们就通过一些案例来看一下.NET6中针对Struct的优化,需要的朋友可以参考一下,希望对大家有所帮助
    2021-11-11
  • ASP.NET Core Web API 教程Project Configuration

    ASP.NET Core Web API 教程Project Configuration

    本文将介绍 Startup 类中的配置方法以及如何通过这些方法来设置应用程序。除此之外,还将介绍如何注册服务以及如何通过扩展方法来实现注册,需要的朋友可以参考下面文章内容
    2021-09-09
  • Net内存管理五大基础

    Net内存管理五大基础

    这篇文章主要给大家分享Net内存管理五大基础内容,文章讲围绕Net内存管理详细介绍文章内容,感兴趣的朋友可以参考一下,希望对你有所帮助
    2021-10-10
  • asp.net mvc路由篇 如何找到 IHttpHandler方法介绍

    asp.net mvc路由篇 如何找到 IHttpHandler方法介绍

    学习是使用asp.net已经有很长一段时间了,现在就来分析一下mvc的整过过程吧。个人计划写一个mvc系列的博文,仅从源代码的角度来分析mvc。在接触mvc时我们一定会经历路由,那么路由这东东是怎么搞出来的啊
    2012-11-11
  • ASP.NET Core使用功能开关控制路由访问操作(续)

    ASP.NET Core使用功能开关控制路由访问操作(续)

    这篇文章主要介绍了ASP.NET Core使用功能开关控制路由访问操作的(续),上一篇文章我们已经介绍过一部份该相关内容,​​在本文,我们可以判断当前路由地址是否为调试地址,让评估返回真,需要的小伙伴可以参考一下
    2022-02-02
  • .NET项目在k8s中运行的Dapr持续集成流程

    .NET项目在k8s中运行的Dapr持续集成流程

    这篇文章主要介绍了.NET项目在k8s中运行的Dapr持续集成流程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04

最新评论