日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁(yè) > 科技  > 軟件

C# 12 中新增的幾大功能你都知道嗎?

來(lái)源: 責(zé)編: 時(shí)間:2024-04-23 09:13:58 184觀看
導(dǎo)讀轉(zhuǎn)眼之間C#都已經(jīng)更新到了12了,那么C# 12 中新增的八大功能大家都了解過(guò)嗎?今天我們來(lái)簡(jiǎn)單講解一下C# 12 中的八大新增功能。一、主構(gòu)造函數(shù)在 Visual Studio 2022 版本 17.6 預(yù)覽版 2 中引入。從 C# 12 開(kāi)始,可以在類(lèi)和

轉(zhuǎn)眼之間C#都已經(jīng)更新到了12了,那么C# 12 中新增的八大功能大家都了解過(guò)嗎?今天我們來(lái)簡(jiǎn)單講解一下C# 12 中的八大新增功能。lt128資訊網(wǎng)——每日最新資訊28at.com

lt128資訊網(wǎng)——每日最新資訊28at.com

一、主構(gòu)造函數(shù)

在 Visual Studio 2022 版本 17.6 預(yù)覽版 2 中引入。lt128資訊網(wǎng)——每日最新資訊28at.com

lt128資訊網(wǎng)——每日最新資訊28at.com

從 C# 12 開(kāi)始,可以在類(lèi)和結(jié)構(gòu)中聲明主構(gòu)造函數(shù)。主構(gòu)造函數(shù)參數(shù)都在類(lèi)的整個(gè)主體的范圍內(nèi)。 為了確保顯式分配所有主構(gòu)造函數(shù)參數(shù),所有顯式聲明的構(gòu)造函數(shù)都必須使用 this() 語(yǔ)法調(diào)用主構(gòu)造函數(shù)。 將主構(gòu)造函數(shù)添加到 class 可防止編譯器聲明隱式無(wú)參數(shù)構(gòu)造函數(shù)。 在 struct 中,隱式無(wú)參數(shù)構(gòu)造函數(shù)初始化所有字段,包括 0 位模式的主構(gòu)造函數(shù)參數(shù)。lt128資訊網(wǎng)——每日最新資訊28at.com

1.主構(gòu)造函數(shù)參數(shù)的最常見(jiàn)用途包括:

  • 作為 base() 構(gòu)造函數(shù)調(diào)用的參數(shù)。
  • 初始化成員字段或?qū)傩浴?/li>
  • 引用實(shí)例成員中的構(gòu)造函數(shù)參數(shù)。

2.代碼示例

將任何參數(shù)放在類(lèi)型名稱(chēng)后面的括號(hào)中:lt128資訊網(wǎng)——每日最新資訊28at.com

public class NameParameter(string name){    public string Name => name;}

以下代碼初始化從主構(gòu)造函數(shù)參數(shù)計(jì)算的兩個(gè)只讀屬性:lt128資訊網(wǎng)——每日最新資訊28at.com

public readonly struct Distance(double dx, double dy){    public readonly double Magnitude { get; } = Math.Sqrt(dx * dx + dy * dy);    public readonly double Direction { get; } = Math.Atan2(dy, dx);}

二、集合表達(dá)式

在 Visual Studio 2022 版本 17.7 預(yù)覽版 5 中引入。lt128資訊網(wǎng)——每日最新資訊28at.com

lt128資訊網(wǎng)——每日最新資訊28at.com

集合表達(dá)式引入了一種新的簡(jiǎn)潔語(yǔ)法,用于創(chuàng)建常用集合值。可以使用展開(kāi)運(yùn)算符(..)將其他集合內(nèi)聯(lián)到這些值中。lt128資訊網(wǎng)——每日最新資訊28at.com

1.下面的示例展示了集合表達(dá)式的用法:

// Create an arrayint[] array = [55, 99, 100, 33];// Create a listList<string> list = ["one", "two", "three", "five", "追逐時(shí)光者"];// Create a spanSpan<char> c = ['a', 'b', 'c', 'd', 'e', 'f', 'h', 'i', 'k'];// Create a jagged 2D arrayint[][] two2D = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [88, 8, 9]];

2.展開(kāi)運(yùn)算符(..)示例代碼:

展開(kāi)運(yùn)算符(集合表達(dá)式中的 ..)可將其參數(shù)替換為該集合中的元素。 參數(shù)必須是集合類(lèi)型。 以下示例演示了展開(kāi)運(yùn)算符的工作原理:lt128資訊網(wǎng)——每日最新資訊28at.com

int[] item0 = [88, 2, 3];int[] item1 = [22, 5, 6];int[] item2 = [7, 99, 9];int[] single = [.. item0, .. item1, .. item2];foreach (var element in single){    Console.Write($"{element}, ");}

沒(méi)有.. 會(huì)有異常:lt128資訊網(wǎng)——每日最新資訊28at.com

lt128資訊網(wǎng)——每日最新資訊28at.com

正常輸出:lt128資訊網(wǎng)——每日最新資訊28at.com

lt128資訊網(wǎng)——每日最新資訊28at.com

三、內(nèi)聯(lián)數(shù)組

在 Visual Studio 2022 版本 17.7 預(yù)覽版 3 中引入。lt128資訊網(wǎng)——每日最新資訊28at.com

lt128資訊網(wǎng)——每日最新資訊28at.com

運(yùn)行時(shí)團(tuán)隊(duì)和其他庫(kù)作者使用內(nèi)聯(lián)數(shù)組來(lái)提高應(yīng)用程序的性能。通過(guò)內(nèi)聯(lián)數(shù)組,開(kāi)發(fā)人員可以在結(jié)構(gòu)類(lèi)型中創(chuàng)建固定大小的數(shù)組。具有內(nèi)聯(lián)緩沖區(qū)的結(jié)構(gòu)體應(yīng)具有與不安全固定大小緩沖區(qū)類(lèi)似的性能特性。lt128資訊網(wǎng)——每日最新資訊28at.com

內(nèi)聯(lián)數(shù)組的聲明與下面的結(jié)構(gòu)類(lèi)似:lt128資訊網(wǎng)——每日最新資訊28at.com

    [System.Runtime.CompilerServices.InlineArray(20)]    public struct Buffer    {        private int _element0;    }

你可以像使用其他數(shù)組一樣使用它們:lt128資訊網(wǎng)——每日最新資訊28at.com

        public static void Test()        {            var buffer = new Buffer();            for (int i = 0; i < 20; i++)            {                buffer[i] = i;            }            foreach (var i in buffer)            {                Console.WriteLine(i);            }        }

四、Lambda 表達(dá)式中的可選參數(shù)

在 Visual Studio 2022 版本 17.5 預(yù)覽版 2 中引入。lt128資訊網(wǎng)——每日最新資訊28at.com

lt128資訊網(wǎng)——每日最新資訊28at.com

可以為 Lambda 表達(dá)式的參數(shù)定義默認(rèn)值。 語(yǔ)法和規(guī)則與將參數(shù)的默認(rèn)值添加到任何方法或本地函數(shù)相同。lt128資訊網(wǎng)——每日最新資訊28at.com

如果 lambda 表達(dá)式只有一個(gè)輸入?yún)?shù),則括號(hào)是可選的:lt128資訊網(wǎng)——每日最新資訊28at.com

Func<double, double> cube = x => x * x * x;

兩個(gè)或更多輸入?yún)?shù)使用逗號(hào)加以分隔:lt128資訊網(wǎng)——每日最新資訊28at.com

Func<int, int, bool> testForEquality = (x, y) => x == y;

可以顯式指定類(lèi)型,如下面的示例所示:lt128資訊網(wǎng)——每日最新資訊28at.com

Func<int, string, bool> isTooLong = (int x, string s) => s.Length > x;

注意:輸入?yún)?shù)類(lèi)型必須全部為顯式或全部為隱式;否則,便會(huì)生成 CS0748 編譯器錯(cuò)誤!!lt128資訊網(wǎng)——每日最新資訊28at.com

五、ref readonly參數(shù)

在 Visual Studio 2022 版本 17.8 預(yù)覽版 2 中引入。lt128資訊網(wǎng)——每日最新資訊28at.com

lt128資訊網(wǎng)——每日最新資訊28at.com

ref readonly修飾符表示方法希望參數(shù)是一個(gè)變量,而不是一個(gè)非變量的表達(dá)式。不是變量的表達(dá)式包括常量、方法返回值和屬性。如果參數(shù)不是變量,編譯器會(huì)發(fā)出警告。lt128資訊網(wǎng)——每日最新資訊28at.com

六、任何類(lèi)型的別名

在 Visual Studio 2022 版本 17.6 預(yù)覽版 3 中引入。lt128資訊網(wǎng)——每日最新資訊28at.com

lt128資訊網(wǎng)——每日最新資訊28at.com

可以使用 using alias 指令來(lái)別名任何類(lèi)型,而不僅僅是命名類(lèi)型。也就是說(shuō),你可以為元組類(lèi)型、數(shù)組類(lèi)型、指針類(lèi)型或其他不安全類(lèi)型創(chuàng)建語(yǔ)義別名。lt128資訊網(wǎng)——每日最新資訊28at.com

使用 using 關(guān)鍵字為元組類(lèi)型創(chuàng)建別名,并進(jìn)行調(diào)用:lt128資訊網(wǎng)——每日最新資訊28at.com

using PointTest = (int x, int y);namespace Csharp12{    internal class Class1    {        public static void Test()        {            PointTest point = (10, 20);            Console.WriteLine($"Point coordinates: X={point.Item1}, Y={point.Item2}");        }    }}

七、Experimental屬性

在 Visual Studio 2022 版本 17.7 預(yù)覽版 3 中引入。lt128資訊網(wǎng)——每日最新資訊28at.com

lt128資訊網(wǎng)——每日最新資訊28at.com

可以使用 System.Diagnostics.CodeAnalysis.ExperimentalAttribute 來(lái)標(biāo)記類(lèi)型、方法或程序集,以指示實(shí)驗(yàn)性特征。 如果訪問(wèn)使用 ExperimentalAttribute 注釋的方法或類(lèi)型,編譯器將發(fā)出警告。 用 Experimental 特性標(biāo)記的程序集中包含的所有類(lèi)型都是實(shí)驗(yàn)性的。lt128資訊網(wǎng)——每日最新資訊28at.com

示例代碼:lt128資訊網(wǎng)——每日最新資訊28at.com

namespace Csharp12{    [AttributeUsage(System.AttributeTargets.Assembly | System.AttributeTargets.Class | System.AttributeTargets.Constructor | System.AttributeTargets.Delegate | System.AttributeTargets.Enum | System.AttributeTargets.Event | System.AttributeTargets.Field | System.AttributeTargets.Interface | System.AttributeTargets.Method | System.AttributeTargets.Module | System.AttributeTargets.Property | System.AttributeTargets.Struct)]    public class ExperimentalAttribute : Attribute    {        public ExperimentalAttribute()        {        }    }    [Experimental]    public class ExperimentalClass    {        public void DoSomething()        {            Console.WriteLine("Doing something experimental...");        }    }    internal class Class1    {        public static void Test()        {            ExperimentalClass exp = new ExperimentalClass();            exp.DoSomething();        }    }}

八、攔截器

預(yù)覽功能在 Visual Studio 2022 版本 17.7 預(yù)覽版 3 中引入。lt128資訊網(wǎng)——每日最新資訊28at.com

lt128資訊網(wǎng)——每日最新資訊28at.com

攔截器是一種方法,該方法可以在編譯時(shí)以聲明方式將對(duì)可攔截方法的調(diào)用替換為對(duì)其自身的調(diào)用。 通過(guò)讓攔截器聲明所攔截調(diào)用的源位置,可以進(jìn)行這種替換。 攔截器可以向編譯中(例如在源生成器中)添加新代碼,從而提供更改現(xiàn)有代碼語(yǔ)義的有限能力。lt128資訊網(wǎng)——每日最新資訊28at.com

注意:攔截器是一項(xiàng)試驗(yàn)性功能,在 C# 12 的預(yù)覽模式下提供。 在將來(lái)的版本中,該功能可能會(huì)發(fā)生中斷性變更或被刪除。 因此,不建議將其用于生產(chǎn)或已發(fā)布的應(yīng)用程序。lt128資訊網(wǎng)——每日最新資訊28at.com

lt128資訊網(wǎng)——每日最新資訊28at.com

要使用攔截器,用戶項(xiàng)目必須指定 <InterceptorsPreviewNamespaces> 屬性。這是允許包含攔截器的命名空間列表。lt128資訊網(wǎng)——每日最新資訊28at.com

<InterceptorsPreviewNamespaces>$(InterceptorsPreviewNamespaces);Microsoft.AspNetCore.Http.Generated;MyLibrary.Generated</InterceptorsPreviewNamespaces>

本文鏈接:http://www.www897cc.com/showinfo-26-84718-0.htmlC# 12 中新增的幾大功能你都知道嗎?

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: Meta如何將其緩存一致性提高至99.99999999

下一篇: 如何編寫(xiě)可讀性高的 C/C++代碼?

標(biāo)簽:
  • 熱門(mén)焦點(diǎn)
Top 主站蜘蛛池模板: 内丘县| 资源县| 开远市| 邹平县| 布尔津县| 黄山市| 奎屯市| 屯留县| 西平县| 葫芦岛市| 甘德县| 广州市| 霸州市| 鲁山县| 沧源| 潍坊市| 台中县| 包头市| 西充县| 高陵县| 平原县| 海兴县| 太仆寺旗| 方正县| 绥棱县| 临猗县| 柳林县| 广河县| 西畴县| 卢氏县| 阿拉善右旗| 巩义市| 安远县| 巨鹿县| 晋宁县| 金华市| 香格里拉县| 乐昌市| 贡嘎县| 衡水市| 安庆市|