欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

一、Record Struct

雖然在上一個(gè)版本中就有了record,但是上一版本中的的recordclass是一個(gè)引用類型,但是record struct是值類型是一個(gè)結(jié)構(gòu),

它的使用方式如下:

record struct Point(int X, int Y);

.NET6中也支持record來(lái)聲明一個(gè)基于classrecord,這和原來(lái)的record是一樣的,例如? ?record class RecordModel(int Id, string Name) ??`? ?這和 ??`? ?record RecordModel(int Id, string Name)?? record struct會(huì)自動(dòng)生成Equals和GetHashCode并重寫==和!=操作符,并且可以用with修改部分屬性創(chuàng)建新的對(duì)象。如果record struct聲明有參數(shù)構(gòu)造器,則會(huì)生成一個(gè)隱式的無(wú)參構(gòu)造。

代碼如下:? ? ?

var p1 = new Point(1, 2);

var p2 = p with { X = 2 };

Console.WriteLine(p1);

Console.WriteLine(p2);

Console.WriteLine(new Point());

運(yùn)行上述代碼可以看到即使沒(méi)有顯式聲明無(wú)參構(gòu)造還是會(huì)生成一個(gè)無(wú)參構(gòu)造來(lái)初始化。

上述代碼輸出如下:

Point { X = 1, Y = 2 }

Point { X = 2, Y = 2 }

Point { X = 0, Y = 0 }

二、readonly struct record

我們可以使用readonly來(lái)標(biāo)記結(jié)構(gòu)體,也可以使用readonly struct record,但record struct不能使用ref修飾。使用readonly struct record聲明的結(jié)構(gòu)體,如果使用Primary Constructor對(duì)應(yīng)的屬性會(huì)是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支持用戶自定義無(wú)參構(gòu)造方法,我們可以在無(wú)參構(gòu)造方法中加入初始化邏輯,

代碼如下如下:

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是結(jié)構(gòu)體空狀態(tài),不會(huì)執(zhí)行無(wú)參構(gòu)造,new是會(huì)執(zhí)行,通過(guò)反射創(chuàng)建對(duì)象的時(shí)候也會(huì)執(zhí)行構(gòu)造,

代碼輸出結(jié)果如下:

1_2_3

0_0_0

1_2_3

除了record之外,.NET6還擴(kuò)展了with表達(dá)式用法,普通結(jié)構(gòu)體和匿名對(duì)象也可以使用with來(lái)修改部分屬性

代碼如下:

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 }));

輸出結(jié)果如下:

2_2_3

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

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

with只能對(duì)public成員進(jìn)行操作,上面代碼中的Z是private,因此在with表達(dá)式中是不能指定。 和record class相比record struct沒(méi)有 Clone 方法,因?yàn)閟truct不需要自帶Clone功能,record struct不允許聲明Clone成員方法,所有record都不允許聲明Clone 成員。

到此這篇關(guān)于 NET6新特新 struct優(yōu)化的文章就介紹到這了,更多相關(guān) NET6 struct優(yōu)化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • .Net Core HttpClient處理響應(yīng)壓縮詳細(xì)

    .Net Core HttpClient處理響應(yīng)壓縮詳細(xì)

    .Net Core作為后起之秀直接將HttpClient扶正,并且在此基礎(chǔ)上改良了HttpClientFactory,接下來(lái)我們就來(lái)探究一下在.Net Core中使用HttpClient處理響應(yīng)壓縮的機(jī)制。,需要的朋友可以參考下面文章的具體內(nèi)容
    2021-09-09
  • 簡(jiǎn)單實(shí)現(xiàn).NET?Hook與事件模擬實(shí)例

    簡(jiǎn)單實(shí)現(xiàn).NET?Hook與事件模擬實(shí)例

    這篇文章主要為大家介紹了簡(jiǎn)單實(shí)現(xiàn).NET?Hook與事件模擬實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • ASP.NET MVC Web API HttpClient簡(jiǎn)介

    ASP.NET MVC Web API HttpClient簡(jiǎn)介

    依稀還記得那個(gè)時(shí)候用WebClient,HttpWebRequest來(lái)發(fā)送一個(gè)請(qǐng)求,現(xiàn)在ASP.NET MVC4中自帶了一個(gè)類HttpClient;需要的朋友可以參考下
    2012-11-11
  • 一個(gè)經(jīng)典的ADO.NET入門例子

    一個(gè)經(jīng)典的ADO.NET入門例子

    一個(gè)經(jīng)典的ADO.NET入門例子...
    2006-07-07
  • ASP.NET Core如何注入多個(gè)服務(wù)實(shí)現(xiàn)類

    ASP.NET Core如何注入多個(gè)服務(wù)實(shí)現(xiàn)類

    這篇文章主要介紹了ASP.NET Core如何注入多個(gè)服務(wù)實(shí)現(xiàn)類的相關(guān)資料,需要的朋友可以參考下面文章的具體內(nèi)容
    2021-09-09
  • .NET 6新特性試用Timer類之PeriodicTimer?

    .NET 6新特性試用Timer類之PeriodicTimer?

    這篇文章主要介紹了.NET 6新特性試用Timer類之PeriodicTimer,PeriodicTimer與其他Timer需要?jiǎng)?chuàng)建事件回調(diào)不同,下,下面文章詳細(xì)介紹PeriodicTimer的使用方式,需要的朋友可以參考一下
    2022-02-02
  • 修改 asp.net core 5 程序的默認(rèn)端口號(hào)

    修改 asp.net core 5 程序的默認(rèn)端口號(hào)

    這篇文章主要介紹了修改 asp.net core 5 程序的默認(rèn)端口號(hào),我們知道可以通過(guò)修改 launchSettings.json 文件中的端口號(hào)來(lái)實(shí)現(xiàn)端口切換,下面來(lái)看看具體的修改過(guò)程吧
    2022-01-01
  • C#與.net高級(jí)編程 C#的多態(tài)介紹

    C#與.net高級(jí)編程 C#的多態(tài)介紹

    封裝、繼承、多態(tài),面向?qū)ο蟮娜筇匦?,前兩?xiàng)理解相對(duì)容易,但要理解多態(tài),特別是深入的了解,對(duì)于初學(xué)者而言可能就會(huì)有一定困難了
    2012-11-11
  • 從零開(kāi)始學(xué)ASP.NET-基礎(chǔ)篇

    從零開(kāi)始學(xué)ASP.NET-基礎(chǔ)篇

    從零開(kāi)始學(xué)ASP.NET-基礎(chǔ)篇...
    2006-07-07
  • 在NET?Core?中獲取?CPU?使用率

    在NET?Core?中獲取?CPU?使用率

    這篇文章我們分享一種如何在?.NETCore?中獲取?CPU使用率的方法,?它所報(bào)告的這個(gè)值和?任務(wù)管理器?中報(bào)告的?CPU?使用值?差不多是一致的,下面來(lái)看看文中的具體詳細(xì)介紹吧
    2022-01-01

最新評(píng)論