日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C# 7.0新功能

發布時間:2023/12/4 C# 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# 7.0新功能 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

下面是對C#7.0 版本所有語言功能的描述。隨著?Visual Studio “15” preview 4?的發布,大部分功能可以被更靈活的應用。現在正是時候將這些功能介紹給大家,你也可以借此讓我們知道你的想法。

  C#7.0 增加了很多新的功能,更專注于數據的消費,代碼的簡化及代碼的性能。或許最大的功能就是元組和模式匹配,它可以快速獲得多個返回結果,而模式匹配,它可以根據數據的“形”的不同來簡化代碼。我們希望將它們結合起來,從而使你的代碼更加簡潔高效,也可以使你更加快樂并富有成效。您可以點擊 Visual studio 窗口頂部的“send feedback”按鈕來告訴我們是否有哪些功能沒有達到預期的功效,也可以告訴我們您對功能進一步改善的一些看法。還有許多功能沒有在 Preview 4 中實現。我們計劃在最終版本發布下面所描述的功能,如果我們不能及時發布這些功能,會在 notes 上通知大家的。如果這些功能有變化,我們也會通知大家的。最終可能會有一些功能的改變和刪除。

  如果你對這些功能的設計過程感興趣,你可以在 Roslyn GitHub site 上查看我們的設計筆記和討論。

  希望你對C#7.0 有一個愉快的體驗。

  輸出變量:

  在當前的 C# 版本,使用 out 參數可能不像我們想的那樣方便。在你調用一個帶有 out 參數的方法之前,你必須首先聲明一個變量并傳遞給它。你通常不會初始化這些變量(畢竟它們會被方法重寫),也不能用 var 去聲明他們,而是必須指定數據的完整類型。

  在C#7.0 版本中,我們添加了 out 變量,可以在給一個函數傳入參數的時候再去定義變量的能力。

  變量的作用域是一個封閉的塊,因此后續的代碼行也可以使用它們。大多數類型的語句都沒有它們自己的作用域,因此被聲明的 out 參數通常被引入到封閉的范圍內。

  注:在 Preview 4 中,適用范圍規則有了更多的限制:out 參數的作用域是聲明它的語句。因此,上面那個例子只有在下一次發布的時候才能真正使用。

  因為 out 變量會直接被當做 out 參數來聲明,這樣編譯器通常會告訴他們應該是的類型(除非它們被重載),所以我們可以用 VAR 來定義,而不必使用真正的類型。

  Out 參數的一種常見用法是 Try…模式, 其中一個布爾返回值表示成功,out 參數會攜帶所獲得的結果:

  注:這里的i僅僅在 if 分支中會用到,所以 Preview 4 可以很好的處理這種情況。

  我們還可以使用通配作為 out 參數,用*的形式來處理,這樣你就可以不必關注你不想關注的返回值了。

  注:我們還不確定在C# 7.0 是否可以使用通配符。

  模式匹配

  C# 7.0 引入了模式的概念,抽象的講,模式是語法元素,能用來測試一個數據是否具有某種“形”,并且在它被使用的時候從中提取信息。

  C# 7.0 中的模式示例:

  • C形式的常量模式(C是 C# 中的常量表達式),我們可以驗證輸入是否等于C

  • TX 形式的類型模式(T是一種類型,X 是一個標識符)。

  • Var x 形式的 Var 模式 (x是一個標識符)。

  這僅僅是一個開始,模式是 C# 中的一個新語言元素,我們希望未來在 C# 中會有更多類型的模式。

  在C# 7.0 中,我們改進了兩種已經存在的模式語法設計:

  • is 表達式的右值也可以是模式,而不僅僅只能是一種類型。

  • switch 中的 case 分支,也可以匹配模式,而不僅僅是常量了。

  在未來,我們會增加更多模式的使用。

  使用模式 IS 的表達式

  下面是一個使用 Is 表達式的例子,用到了常量模式和類型模式。

  正如你所看到的,模式變量(模式引入的變量)很像之前說過的輸出變量,可以在表達式中聲明,并且在最近的定義域中使用。就像輸出變量一樣,模式變量是可變的。

  注:像輸出變量(out variables)一樣,我們會在 Preview 4 給出更加嚴謹的規則。

  模式和 Try 方法一起用也是可以的。

  帶模式的 Switch 語句

  我們正在歸納總結這些 switch 語句,因此:

  • 你可以在任何類型上使用 switch(不僅僅是原始類型)

  • 可以在 case 子句中使用模式

  • Case 子句可以擁有額外的條件

  下面是一個例子

  關于新擴展的 switch 語句,有幾點需要注意:

  • Case 子句的順序現在很重要:就像 catch 子句,case 子句不再是必然不相交的,第一個子句匹配的將被選擇。

  • 默認子句總是最后被判斷:即使上面代碼中 null 子句是最后才來,它會在默認子句被選擇前被檢查。這是為了與現有 switch 語義相兼容。然而,好的做法通常會讓你把默認子句放到最后。

  • Switch 不會到最后的 null 語句:這是因為當前 IS 表達式的例子具有類型匹配,不會匹配到 null。 這保證了空值不會不小心被任何的類型模式匹配上的情況; 你必須更明確如何處理它們(或放棄它而使用默認語句)。

  元組

  這是一個從方法中返回多個值的常見模式。目前可用的選項并不是最理想的:

  輸出參數。使用笨拙(即便有上面描述到的改進),它們在使用異步方法時不起作用。

  • System.Tuple<…>返回類型。使用繁瑣并且需要分配一個元組對象。

  • 方法的定制傳輸類型:對于類型,具有大量的代碼開銷,其目的僅是暫時將一些值組合起來。

  • 通過動態返回類型返回匿名類型。高的性能開銷,而且沒有靜態類型檢查。

  為了在這方面做得更好,C# 7.0 添加了元組類型和元組文字:

  這個方法可以有效地返回三個字符串,將其作為元素包含在一個元組值里。

  方法的調用者將會接收到一個元組,并且可以單獨地訪問其中的元素:

  Item1 等是元組元素的默認名,并能夠一直使用。但它們不具有描述性,因此你可以選擇添加更好的。

  現在元組的接收者有多個具有描述性的名稱可用:

  你也可以在元組文字中直接指定元素名稱:

  通常來說,你可以給元組類型分配相互無關的名字,只要獨立的元素是可以被分配的,元組類型會自如轉換成其他元組類型。但是也存在一些限制,特別是對于元組文字,會在常見的錯誤情況下警告或提示,例如偶然交換元素的名字。

  注:這些限制還沒在 Preview 4 中實現 。

  元組是值類型,而且他們的元素是公開的、可變的。兩個元組相等(并且有相同的哈希值),意味著它們的元素都是成對匹配的(并且有相同的哈希值)。

  這使得元組對于在需要多個返回值的情況下非常有用。舉例來說,如果你需要一個有多種鍵的詞典,使用元組作為你的鍵,一切會非常順利。如果你需要在每個位置有多種值的列表,使用元組進行列表搜索,程序會正常運行。

  注:元組依賴于一組基本類型,它們還沒包括在 Preview 4 中。為了使該特性工作,你可以通過 NuGget 獲取它們:

  • 在 Solution Explorer 中右鍵點擊項目,并選擇“管理 NuGet 包…”

  • 選擇“Browse”選項卡,選中“Include prerelease” ,選擇“nuget.org”作為“Package source”

  • 搜索“System.ValueTuple”并安裝它

  Deconstruction 解構

  消耗元組的另一種方法是解構元組。解構聲明是一種將元組拆分,并單獨分配到新變量的語法:

  在解構中可采用 var 關鍵字來聲明單獨的變量:

  或者把 var 關鍵字提取出來放在括號外:

  你也可以通過解構賦值來解構成一個現有變量:

  解構不僅僅適用于元組。任何類型都可以被解構,只要它有一個對應的(實例或擴展)解構方法:

  輸出參數由結構產生的值構成。
(為何它使用了參數,而不是返回一個元組?這是為了讓你可以針對不同的值擁有多個重載)。

  構造函數和解構函數以對稱方式出現是一種常見的模式。
至于輸出變量,我們計劃在解構中使用“通配符”,來化簡你不關心的那些變量:

  注:現在仍然不能確定通配符是否會出現在C#7.0 中。

  局部函數

  有時,一個輔助函數只在一個使用它的單一方法的內部有意義。現在你可以在其他功能體內部以一個局部函數來聲明這樣的函數:

  閉合范圍內的參數和局部變量在局部函數內是可用的,就像他們在 lambda 表達式中一樣。
舉個例子,迭代的方法實現通常需要一個非迭代的封裝方法,以便在調用時檢查實參。(迭代器本身不能啟動,直到調用 MoveNext 才會運行)。局部函數非常適合這樣的場景:

  如果 Iterator 是緊隨 Filter 的一個私有方法,它將有可能被其他成員不小心使用(不需要參數檢查)。此外,它將采取所有跟 Filter 里相同的參數,而不是指定域內的參數。

  注:在 Preview 4 版本中,局部函數必須在它們被調用之前聲明。這個限制將被放松,能調用讀取直接賦值的局部變量。

  文字改進

  C#7.0 允許用”_”作為數字分隔符:

  你可以把它們放在任意的數字之間,以提高可讀性。這對數值沒有影響。
另外,C # 7 引進了二進制數,因此,您可以直接指定二進制模式,而不需要知道十六進制符號。

  引用返回和局部引用

  就像在C#中你可以通過引用(用 ref 修飾符)傳遞參數,你現在也可以通過引用來返回參數,并通過引用將它們存儲在局部變量中。

  這個是非常有用的。例如,一個游戲可能會將它的數據保存在一個大的預分配數組結構中(為避免垃圾回收機制暫停)。這個方法可以直接返回一個引用到這樣一個結構,且通過調用者可以讀取和修改它。

  為確保安全,也有以下一些限制:

  • 你只能返回”安全返回”的引用:一個是傳遞給你的引用,一個是指向對象中的引用

  • 本地引用會被初始化成一個本地存儲,并且不能指向另一個存儲

  異步返回類型

  到目前為止,在C#的異步方法必須返回 void,Task 或 Task<T>。C#7.0 允許以這樣的方式來定義其它類型,從而使它們可以從異步方法返回。

  例如,我們計劃建立一個 ValueTask<T>結構類型的數據。建立它是為了防止 Task<T> 對象的分配時,異步操作的結果在等候是已可用。對于很多異步場景,比如以涉及緩沖為例,這可以大大減少分配的數量,并使性能有顯著提升。

  注:異步返回類型尚未在 Preivew4 中提供。

  更多 Expression-bodied 成員

  Expression-bodied 的方法、屬性等都是C# 6.0 的重大突破,但是不是所有的成員都可以使用的。 C#7.0 添加了訪問器、構造函數和終結器等,使更多成員可以使用 Expression-bodied 方法:

  注:這些額外的 Expression-bodied 成員尚未在 Preview4 中提供。

  這是一個由社區共享的示例,而非微軟 C# 團隊提供的,它是開源的!

  Throw?表達式

  在表達式中間拋出一個異常是很容易的:只要調用一個方法!但在 C # 7.0 中,我們允許在一些地方直接拋出一個表達式:

  注:Throw 表達式尚未在 Preview 4 中提供。

原文地址:https://news.cnblogs.com/n/561619/


.NET社區新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關注

總結

以上是生活随笔為你收集整理的C# 7.0新功能的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。