主頁 > .NET開發 > C# 版本特性一覽

C# 版本特性一覽

2023-06-06 13:30:51 .NET開發

前言

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

版本一覽

C# 1.0

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

C# 1.2

發布日期:2003 年 4 月
從此版本開始,當 IEnumerator 實作 IDisposable 時,foreach 回圈中生成的代碼會在 IEnumerator 上呼叫 Dispose,【剛剛知道還有這特性】

C# 2.0

發布日期:2005 年 11 月
和 Visual Studio 2005 一起發布,看看這些金光閃閃的特性吧:

  • 泛型
  • 分部型別【partial 關鍵字】
  • 匿名方法【利用 delegate 運算子】
  • 可為空的值型別【Nullable<T>T?
  • 迭代器【yield return 陳述句】
  • 協變和逆變【這時候還不支持泛型介面和委托】
  • getter/setter 單獨可訪問性
  • 靜態類

C# 3.0

發布日期:2007 年 11 月
C# 3.0 和 Visual Studio 2008 一起發布于 2007 年下半年,但完整的語言功能是在 .NET Framework 3.5 版中發布的,如果說 2.0 時期是分庭抗禮,那么到了 3.0 就真的是一騎絕塵,諸多特性完美地結合在一起,盡管我習慣用 Lambda 運算式與鏈式呼叫來寫 LINQ ,但是查詢運算式寫法的 LINQ 實在是太驚艷了,

  • 自動實作的屬性【{ get; set; } 寫法】
  • 匿名型別【new { Foo = 108, Bar = "Hello" } 寫法】
  • 查詢運算式【from foo select bar where baz 寫法】
  • Lambda 運算式
  • 運算式樹
  • 擴展方法
  • 隱式型別本地變數【var 關鍵字】
  • 分部方法【partial 關鍵字可以作用在方法上,沒用過該特性】
  • 物件和集合初始值設定項【Foo foo = new Foo { Bar = "Hello" } 寫法】
  • WPF、WCF、WF

C# 4.0

發布日期:2010 年 4 月
C# 版本 4.0 隨 Visual Studio 2010 一起發布,引入了一些小改進,

  • 動態系結【dynamic 關鍵字,不在編譯時檢查型別,而是在運行時評估,】
  • 命名實參和可選實參【可以少些一些方法多載了】
  • 泛型協變和逆變【完全體,但一般只有底層類別庫設計者需要考慮這玩意】
  • 嵌入的互操作型別【沒什么存在感】
  • System.Threading.Tasks 命名空間【更方便的執行緒操作及并行處理】
  • System.Tuple
  • 現有類的新方法【例如 String.IsNullOrWhiteSpaceStopwatch.RestartStringBuilder.Clear 等等】
  • 現有方法的新多載【例如 String.Join 方法添加了可以連接 IEnumerable<T> 集合的成員的新多載,】
  • Managed Extensibility Framework (MEF)【動態加載,實作插件系統的好幫手】
  • ASP.NET MVC

C# 5.0

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

  • 異步成員【asyncawait,版本之子,】
  • 呼叫方資訊特性【CallerMemberName 等,方便確定呼叫方資訊,】

C# 6.0

發布日期:2015 年 7 月
版本 6.0 隨 Visual Studio 2015 一起發布,發布了很多使得 C# 編程更有效率的小功能,對應 .NET Framework 4.6、4.6.1、4.6.2,.NET Core 出現了,好訊息是 .NET 開放原始碼了,壞訊息是微軟開始折騰,從這開始語法糖多得齁嗓子,得益于諸多新特性,代碼變得簡短了,但是引入了很多新符號,心智負擔加重了,“Null 條件運算子”、“字串內插”、“nameof 運算式”是我比較喜歡的特性,

  • 靜態匯入【using static 指令命名了一種型別,無需指定型別名稱即可訪問其靜態成員和嵌套型別,】
  • 例外篩選器【catch (ExceptionType [e]) when (expr)
  • 自動屬性初始化運算式【public string Foo { get; set; } = string.Empty;
  • 運算式主體定義【例如:public override string ToString() => $"{foo} {bar}";
  • Null 條件運算子【成員訪問?. 或元素訪問?[]
  • 字串內插【$"{foo} {bar}"
  • nameof 運算式【nameof(Foo)

C# 7.0

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

  • out 變數【if (Int32.TryParse(foo, out int bar)) Console.WriteLine($"Converted '{foo}' to {bar}");
  • 元組【(double Foo, int Bar) t2 = (4.5, 3);
  • 模式匹配
  • 本地函式【內部函式,讓我想起了 Delphi】
  • ref 區域變數【指標既視感】
  • 棄元【(_, _, foo) = bar.baz();,配合元組,你可以給,但我可以不要,】

C# 8.0

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

  • 默認介面方法【抽象也能順便帶點兒實作,腦抽特性】
  • 模式匹配增強功能【來嘛,有點學不過來了啊】
  • Null 合并賦值【??=
  • 后面懶得列了……

C# 9

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

  • 記錄【record 關鍵字,只讀資料類語法糖】
  • 僅限 Init 的資源庫【public int Foo { get; init; } ,只讀資料類語法糖之二】
  • 頂級陳述句【為了少寫點代碼微軟也是拼了】
  • 模式匹配增強功能【繼續增強……】
  • 函式指標【圖窮匕見,高性能計算這一塊與我似乎沒有交集】
  • 后面懶得列了……

C# 10

發布日期:2021 年 11 月
C# 10 繼續致力于洗掉不必要的模式、將資料與演算法分離以及提高 .NET 運行時的性能等主題,特性串列又是像寫小說一樣長,行吧,你開心就好,

  • 這次我一個也不想列……

C# 11

發布日期:2022 年 11 月
和前面比起來稍微節制了一點兒,優化了數學計算和字串處理,模式匹配不用說,給我增強!

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

后記

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

作者:高云鵬 出處:https://gaoyunpeng.cnblogs.com/ 知識共享許可協議
本作品采用知識共享署名-非商業性使用 4.0 國際許可協議進行許可,

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/554418.html

標籤:.NET技术

上一篇:基于SqlSugar的開發框架循序漸進介紹(31)-- 在查詢介面中實作多表聯合和單表物件的統一處理

下一篇:返回列表

標籤雲
其他(160434) Python(38206) JavaScript(25478) Java(18198) C(15237) 區塊鏈(8270) C#(7972) AI(7469) 爪哇(7425) MySQL(7234) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5873) 数组(5741) R(5409) Linux(5346) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4585) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2434) ASP.NET(2403) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1982) 功能(1967) HtmlCss(1952) Web開發(1951) C++(1929) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1879) .NETCore(1863) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • WebAPI簡介

    Web體系結構: 有三個核心:資源(resource),URL(統一資源識別符號)和表示 他們的關系是這樣的:一個資源由一個URL進行標識,HTTP客戶端使用URL定位資源,表示是從資源回傳資料,媒體型別是資源回傳的資料格式。 接下來我們說下HTTP. HTTP協議的系統是一種無狀態的方式,使用請求/ ......

    uj5u.com 2020-09-09 22:07:47 more
  • asp.net core 3.1 入口:Program.cs中的Main函式

    本文分析Program.cs 中Main()函式中代碼的運行順序分析asp.net core程式的啟動,重點不是剖析原始碼,而是理清程式開始時執行的順序。到呼叫了哪些實體,哪些法方。asp.net core 3.1 的程式入口在專案Program.cs檔案里,如下。ususing System; us ......

    uj5u.com 2020-09-09 22:07:49 more
  • asp.net網站作為websocket服務端的應用該如何寫

    最近被websocket的一個問題困擾了很久,有一個需求是在web網站中搭建websocket服務。客戶端通過網頁與服務器建立連接,然后服務器根據ip給客戶端網頁發送資訊。 其實,這個需求并不難,只是剛開始對websocket的內容不太了解。上網搜索了一下,有通過asp.net core 實作的、有 ......

    uj5u.com 2020-09-09 22:08:02 more
  • ASP.NET 開源匯入匯出庫Magicodes.IE Docker中使用

    Magicodes.IE在Docker中使用 更新歷史 2019.02.13 【Nuget】版本更新到2.0.2 【匯入】修復單列匯入的Bug,單元測驗“OneColumnImporter_Test”。問題見(https://github.com/dotnetcore/Magicodes.IE/is ......

    uj5u.com 2020-09-09 22:08:05 more
  • 在webform中使用ajax

    如果你用過Asp.net webform, 說明你也算是.NET 開發的老兵了。WEBform應該是2011 2013左右,當時還用visual studio 2005、 visual studio 2008。后來基本都用的是MVC。 如果是新開發的專案,估計沒人會用webform技術。但是有些舊版 ......

    uj5u.com 2020-09-09 22:08:50 more
  • iis添加asp.net網站,訪問提示:由于擴展配置問題而無法提供您請求的

    今天在iis服務器配置asp.net網站,遇到一個問題,記錄一下: 問題:由于擴展配置問題而無法提供您請求的頁面。如果該頁面是腳本,請添加處理程式。如果應下載檔案,請添加 MIME 映射。 WindowServer2012服務器,添加角色安裝完.netframework和iis之后,運行aspx頁面 ......

    uj5u.com 2020-09-09 22:10:00 more
  • WebAPI-處理架構

    帶著問題去思考,大家好! 問題1:HTTP請求和回傳相應的HTTP回應資訊之間發生了什么? 1:首先是最底層,托管層,位于WebAPI和底層HTTP堆疊之間 2:其次是 訊息處理程式管道層,這里比如日志和快取。OWIN的參考是將訊息處理程式管道的一些功能下移到堆疊下端的OWIN中間件了。 3:控制器處理 ......

    uj5u.com 2020-09-09 22:11:13 more
  • 微信門戶開發框架-使用指導說明書

    微信門戶應用管理系統,采用基于 MVC + Bootstrap + Ajax + Enterprise Library的技術路線,界面層采用Boostrap + Metronic組合的前端框架,資料訪問層支持Oracle、SQLServer、MySQL、PostgreSQL等資料庫。框架以MVC5,... ......

    uj5u.com 2020-09-09 22:15:18 more
  • WebAPI-HTTP編程模型

    帶著問題去思考,大家好!它是什么?它包含什么?它能干什么? 訊息 HTTP編程模型的核心就是訊息抽象,表示為:HttPRequestMessage,HttpResponseMessage.用于客戶端和服務端之間交換請求和回應訊息。 HttpMethod類包含了一組靜態屬性: private stat ......

    uj5u.com 2020-09-09 22:15:23 more
  • 部署WebApi隨筆

    一、跨域 NuGet參考Microsoft.AspNet.WebApi.Cors WebApiConfig.cs中配置: // Web API 配置和服務 config.EnableCors(new EnableCorsAttribute("*", "*", "*")); 二、清除默認回傳XML格式 ......

    uj5u.com 2020-09-09 22:15:48 more
最新发布
  • C# 版本特性一覽

    <a href="https://www.cnblogs.com/gaoyunpeng/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/85624/20130508133555.png" alt="" />&l...

    uj5u.com 2023-06-06 13:30:51 more
  • 基于SqlSugar的開發框架循序漸進介紹(31)-- 在查詢介面中實作多表

    在一些復雜的業務表中間查詢資料,有時候操作會比較復雜一些,不過基于SqlSugar的相關操作,處理的代碼會比較簡單一些,以前我在隨筆《基于SqlSugar的開發框架循序漸進介紹(2)-- 基于中間表的查詢處理》介紹過基于主表和中間表的聯合查詢,而往往實際會比這個會復雜一些。本篇隨筆介紹聯合多個表進行... ......

    uj5u.com 2023-06-03 08:56:54 more
  • 基于SqlSugar的開發框架循序漸進介紹(31)-- 在查詢介面中實作多表

    <a href="https://www.cnblogs.com/wuhuacong/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/u8867.png" alt="" /></a>...

    uj5u.com 2023-06-03 08:50:57 more
  • 介紹.NET幾種人臉識別組件

    <a href="https://www.cnblogs.com/xbhp/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/957602/20230310105611.png" alt="" /></a&...

    uj5u.com 2023-06-02 09:27:30 more
  • 介紹.NET幾種人臉識別組件

    人臉識別技術在現代社會中扮演著越來越重要的角色,比如人臉識別門禁、人臉識別支付、甚至人臉識別網站登錄等。 最近有群友問.NET有沒有人臉識別的組件,小編查閱相關資料介紹下面幾種.NET人臉識別組件供大家參考。 **1、Microsoft Azure Face API** 簡介:Microsoft A ......

    uj5u.com 2023-06-02 09:26:55 more
  • 由C# yield return引發的思考

    <a href="https://www.cnblogs.com/wucy/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2042116/20211209170256.png" alt="" /></a...

    uj5u.com 2023-05-31 09:56:16 more
  • Spectre.Console-實作自己的CLI

    <a href="https://www.cnblogs.com/podolski/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/616093/20140323000327.png" alt="" /><...

    uj5u.com 2023-05-31 09:56:09 more
  • Spectre.Console-實作自己的CLI

    <a href="https://www.cnblogs.com/podolski/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/616093/20140323000327.png" alt="" /><...

    uj5u.com 2023-05-31 09:55:47 more
  • 由C# yield return引發的思考

    ### 前言 當我們撰寫 C# 代碼時,經常需要處理大量的資料集合。在傳統的方式中,我們往往需要先將整個資料集合加載到記憶體中,然后再進行操作。但是如果資料集合非常大,這種方式就會導致記憶體占用過高,甚至可能導致程式崩潰。 C# 中的`yield return`機制可以幫助我們解決這個問題。通過使用`y ......

    uj5u.com 2023-05-31 09:55:31 more
  • 第二單元 常用快捷鍵,注釋,變數

    1. 注釋 不寫注釋的程式員都是耍流氓!!名字瞎起是更是土匪!!! 1. 單行文本注釋 static void Main(string[] args) { // 這是單行文本注釋,向控制臺輸出一段字串 Console.WriteLine("Hello World!"); Console.ReadL ......

    uj5u.com 2023-05-30 06:39:57 more