首页 > 作文

.NET6新特新 struct优化

更新时间:2023-04-03 22:07:09 阅读: 评论:0

目录
一、record struct二、readonly struct record三、parameterless constructor

在.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声明有参数构造器,则我的乐园作文400字四年级下册会生成一个隐式的无参构造。

代码如下:

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 }

二、re利群广告词adonly 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; t; }    public int y { get; t; }    private int z { get; t; }    public point1()    {        x = 1;        y = 2;        z = 3;    }    publ凤凰传奇全部歌曲ic 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(jsonrializer.rialize(obj));console.writeline(jsonrializer.rialize(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优化内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

本文发布于:2023-04-03 22:07:08,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/f32d2f0c6f8a4ac64c0794489ac04491.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:.NET6新特新 struct优化.doc

本文 PDF 下载地址:.NET6新特新 struct优化.pdf

下一篇:返回列表
标签:声明   代码   结构   可以使用
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图