NET6新特新 struct优化

2022-04-15 20:19:02
目录
一、Record Struct二、readonly struct record三、Parameterless Constructor

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

一、Record Struct

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

public int X { get; set; } public int Y { get; set; } nnvUAYHiGprivate 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 成员。