月夜影视免费_麻豆一二三四区乱码_2021最新最全的免费追剧网_无码一级做a爱过程免费视频喷水_新婚熄与翁公李钰雯

C# 版本特性一覽

前言

使用 C# 作為開發(fā)語言已經(jīng) 15 個(gè)年頭了,受惠于 C# 的不斷更新,伴隨著大量的新特性與大量語法糖,讓我更加容易寫出簡潔、高效的代碼。日常中大量特性早已信手拈來,當(dāng)然從未嘗試過的特性更是難以盡數(shù),但是每每回憶代碼中的特性究竟是哪個(gè)版本引入的,卻頗為含糊。索性簡單整理記錄下來,用以備忘,進(jìn)而能夠更精確地根據(jù)想使用的特性確定程序需要的 Framework 版本。盡管參考了微軟的官方文檔,但所列特性難免基于我所接觸使用到的狹隘范圍,用中括號(hào)附上短評(如【我是短評】),用以提示,希望不至于畫蛇添足吧。


(資料圖片僅供參考)

版本一覽C# 1.0

發(fā)布日期:2002 年 1 月一切的開始,由于我是從 2.0 開始接觸 C# 的,在此不贅述該版本了,只能說 C# 的起點(diǎn)不低,從 Java 轉(zhuǎn)過來上手很快,兼具 C 語族的語法特點(diǎn),同時(shí)又很有 Delphi 味,簡直夢幻開局。

C# 1.2

發(fā)布日期:2003 年 4 月從此版本開始,當(dāng) IEnumerator實(shí)現(xiàn) IDisposable時(shí),foreach循環(huán)中生成的代碼會(huì)在 IEnumerator上調(diào)用 Dispose?!緞倓傊肋€有這特性】

C# 2.0

發(fā)布日期:2005 年 11 月和 Visual Studio 2005 一起發(fā)布??纯催@些金光閃閃的特性吧:

泛型分部類型【partial關(guān)鍵字】匿名方法【利用 delegate運(yùn)算符】可為空的值類型【NullableT?】迭代器【yield return語句】協(xié)變和逆變【這時(shí)候還不支持泛型接口和委托】getter/setter單獨(dú)可訪問性靜態(tài)類C# 3.0

發(fā)布日期:2007 年 11 月C# 3.0 和 Visual Studio 2008 一起發(fā)布于 2007 年下半年,但完整的語言功能是在 .NET Framework 3.5版中發(fā)布的。如果說 2.0 時(shí)期是分庭抗禮,那么到了 3.0 就真的是一騎絕塵,諸多特性完美地結(jié)合在一起。盡管我習(xí)慣用 Lambda表達(dá)式與鏈?zhǔn)秸{(diào)用來寫 LINQ,但是查詢表達(dá)式寫法的 LINQ實(shí)在是太驚艷了。

自動(dòng)實(shí)現(xiàn)的屬性【{ get; set; }寫法】匿名類型【new { Foo = 108, Bar = "Hello" }寫法】查詢表達(dá)式【from foo select bar where baz寫法】Lambda 表達(dá)式表達(dá)式樹擴(kuò)展方法隱式類型本地變量【var關(guān)鍵字】分部方法【partial關(guān)鍵字可以作用在方法上,沒用過該特性】對象和集合初始值設(shè)定項(xiàng)【Foo foo = new Foo { Bar = "Hello" }寫法】WPF、WCF、WFC# 4.0

發(fā)布日期:2010 年 4 月C# 版本 4.0 隨 Visual Studio 2010 一起發(fā)布,引入了一些小改進(jìn)。

動(dòng)態(tài)綁定【dynamic關(guān)鍵字,不在編譯時(shí)檢查類型,而是在運(yùn)行時(shí)評估?!棵麑?shí)參和可選實(shí)參【可以少些一些方法重載了】泛型協(xié)變和逆變【完全體,但一般只有底層類庫設(shè)計(jì)者需要考慮這玩意】嵌入的互操作類型【沒什么存在感】System.Threading.Tasks命名空間【更方便的線程操作及并行處理】System.Tuple類現(xiàn)有類的新方法【例如 String.IsNullOrWhiteSpace、Stopwatch.Restart、StringBuilder.Clear等等】現(xiàn)有方法的新重載【例如 String.Join方法添加了可以連接 IEnumerable集合的成員的新重載?!縈anaged Extensibility Framework (MEF)【動(dòng)態(tài)加載,實(shí)現(xiàn)插件系統(tǒng)的好幫手】ASP.NET MVCC# 5.0

發(fā)布日期:2012 年 8 月C# 版本 5.0 隨 Visual Studio 2012 一起發(fā)布。.NET Framework 4.5、4.5.1、4.5.2 基本上就是一系列更新和優(yōu)化,新東西很少。

異步成員【asyncawait,版本之子?!空{(diào)用方信息特性【CallerMemberName等,方便確定調(diào)用方信息?!緾# 6.0

發(fā)布日期:2015 年 7 月版本 6.0 隨 Visual Studio 2015 一起發(fā)布,發(fā)布了很多使得 C# 編程更有效率的小功能。對應(yīng) .NET Framework 4.6、4.6.1、4.6.2。.NET Core出現(xiàn)了,好消息是 .NET開放源碼了,壞消息是微軟開始折騰,從這開始語法糖多得齁嗓子。得益于諸多新特性,代碼變得簡短了,但是引入了很多新符號(hào),心智負(fù)擔(dān)加重了?!?code>Null條件運(yùn)算符”、“字符串內(nèi)插”、“nameof表達(dá)式”是我比較喜歡的特性。

靜態(tài)導(dǎo)入【using static指令命名了一種類型,無需指定類型名稱即可訪問其靜態(tài)成員和嵌套類型。】異常篩選器【catch (ExceptionType [e]) when (expr)】自動(dòng)屬性初始化表達(dá)式【public string Foo { get; set; } = string.Empty;】表達(dá)式主體定義【例如:public override string ToString() => $"{foo} {bar}";Null條件運(yùn)算符【成員訪問?.或元素訪問?[]】字符串內(nèi)插【$"{foo} {bar}"nameof表達(dá)式【nameof(Foo)】C# 7.0

發(fā)布日期:2017 年 3 月C# 7.0 版已與 Visual Studio 2017 一起發(fā)布。 此版本繼承和發(fā)展了 C# 6.0。對應(yīng) .NET Framework 4.7、4.7.1、4.7.2?!?code>out變量”、“模式匹配”是我比較喜歡的特性。后續(xù)的 C# 7.1、7.2、7.3 基本都在為新特性添磚加瓦。明顯開始和別的語言抄來抄去,當(dāng)然我們一般都稱為“借鑒”。

out變量【if (Int32.TryParse(foo, out int bar)) Console.WriteLine($"Converted "{foo}" to {bar}");】元組【(double Foo, int Bar) t2 = (4.5, 3);】模式匹配本地函數(shù)【內(nèi)部函數(shù),讓我想起了 Delphi】ref 局部變量【指針既視感】棄元【(_, _, foo) = bar.baz();,配合元組,你可以給,但我可以不要?!緾# 8.0

發(fā)布日期:2019 年 9 月C# 8.0 版是專門面向 .NET C# Core 的第一個(gè)主要 C# 版本。特性列了一大篇,實(shí)在是沒法看了,下面就沒有一一列舉,腳本語言味兒越來越重,各種操作符、關(guān)鍵字更是玩出花來,心智負(fù)擔(dān)越發(fā)沉重了。除了模式匹配,別的特性完全不想碰。

默認(rèn)接口方法【抽象也能順便帶點(diǎn)兒實(shí)現(xiàn),腦抽特性】模式匹配增強(qiáng)功能【來嘛,有點(diǎn)學(xué)不過來了啊】Null 合并賦值【??=】后面懶得列了……C# 9

發(fā)布日期:2020 年 11 月C# 9 隨 .NET 5 一起發(fā)布。 它是面向 .NET 5 版本的任何程序集的默認(rèn)語言版本。對于既存特性進(jìn)行了梳理與調(diào)整,然后引入了一大堆新特性,這是有 KPI 壓力嗎?老特性千萬別給我搞沒了,新特性我也保證不碰,咱們心照不宣吧。

記錄【record關(guān)鍵字,只讀數(shù)據(jù)類語法糖】僅限 Init 的資源庫【public int Foo { get; init; },只讀數(shù)據(jù)類語法糖之二】頂級語句【為了少寫點(diǎn)代碼微軟也是拼了】模式匹配增強(qiáng)功能【繼續(xù)增強(qiáng)……】函數(shù)指針【圖窮匕見,高性能計(jì)算這一塊與我似乎沒有交集】后面懶得列了……C# 10

發(fā)布日期:2021 年 11 月C# 10 繼續(xù)致力于刪除不必要的模式、將數(shù)據(jù)與算法分離以及提高 .NET 運(yùn)行時(shí)的性能等主題。特性列表又是像寫小說一樣長,行吧,你開心就好。

這次我一個(gè)也不想列……C# 11

發(fā)布日期:2022 年 11 月和前面比起來稍微節(jié)制了一點(diǎn)兒,優(yōu)化了數(shù)學(xué)計(jì)算和字符串處理,模式匹配不用說,給我增強(qiáng)!

泛型數(shù)學(xué)支持【不懂】UTF-8 字符串字面量【"foo"u8】必需的成員【required修飾符,KPI 味太濃了】其他的不列了……后記

可以說從 6.0 開始就不干正事兒了,有實(shí)際意義的特性越來越少,性能增強(qiáng)、安全性加強(qiáng)什么的是值得肯定的,但是加的這一堆特性真是有點(diǎn)缺乏節(jié)制,我寧可在 11 的環(huán)境下寫著 6 的代碼。人家是“人生苦短”,我看微軟是“只嫌命長”啊。

關(guān)鍵詞:

編輯: MO
下一篇: 最后一頁

相關(guān)新聞

精彩推送