最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

.NET6新特新?struct優(yōu)化

 更新時間:2021年11月22日 16:37:45   作者:494324190  
這篇文章主要給大家分享的是?NET6新特新?struct優(yōu)化,在.NET6中針對Struct做了一些優(yōu)化,下面我們就通過一些案例來看一下.NET6中針對Struct的優(yōu)化,需要的朋友可以參考一下,希望對大家有所幫助

在.NET6中針對Struct做了一些優(yōu)化,下面我們就通過一些案例來看一下.NET6中針對Struct的優(yōu)化。

一、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修改部分屬性創(chuàng)建新的對象。如果record struct聲明有參數(shù)構造器,則會生成一個隱式的無參構造。

代碼如下:? ? ?

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是結構體空狀態(tài),不會執(zhí)行無參構造,new是會執(zhí)行,通過反射創(chuàng)建對象的時候也會執(zhí)行構造,

代碼輸出結果如下:

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優(yōu)化的文章就介紹到這了,更多相關 NET6 struct優(yōu)化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論

张家界市| 深水埗区| 赫章县| 修文县| 海安县| 津南区| 长治市| 卢湾区| 泰顺县| 昔阳县| 双江| 饶阳县| 巴马| 安康市| 正安县| 长沙县| 宁城县| 德阳市| 乾安县| 晴隆县| 阿拉善右旗| 贵州省| 桦南县| 若尔盖县| 新化县| 白沙| 常宁市| 临夏县| 仙游县| 富川| 友谊县| 沅陵县| 六枝特区| 西乡县| 山东| 巴彦淖尔市| 盐源县| 宝鸡市| 博湖县| 玛纳斯县| 唐海县|