本篇內(nèi)容介紹了“C# 7.2和8.0有哪些功能”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!
創(chuàng)新互聯(lián)建站專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務,包含不限于網(wǎng)站設計制作、做網(wǎng)站、奉賢網(wǎng)絡推廣、微信小程序定制開發(fā)、奉賢網(wǎng)絡營銷、奉賢企業(yè)策劃、奉賢品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)建站為所有大學生創(chuàng)業(yè)者提供奉賢建站搭建服務,24小時服務熱線:18980820575,官方網(wǎng)址:www.cdcxhl.com
只讀引用和只讀結(jié)構(gòu)體 [7.2原型]
首先提到的是只讀引用和結(jié)構(gòu)體。簡單來講,這項特性使得C#能夠使用類似const的參數(shù)來提高性能。像我們所知道的“ref只讀參數(shù)”和簡單的“in參數(shù)”,這些特性使得大的結(jié)構(gòu)體能夠通過引用來進行傳遞,并且不允許對其進行修改。
這個提案中的一部分就是只讀結(jié)構(gòu)體。開發(fā)人員將一個結(jié)構(gòu)體標記為只讀之后,表示任何方法都不能對這個結(jié)構(gòu)體進行修改。這會對性能有很大提升,因為它會告訴編譯器,它可以跳過通常用于防止意外修改只讀變量的復制操作。
Blittable類型 [7.2提案]
維基百科上是這樣描述blittable類型的:
在微軟的.NET框架中,數(shù)據(jù)在托管代碼和非托管代碼中的內(nèi)存表示是截然不同的。然而,blittable類型被定義為在這兩種不同的環(huán)境下,數(shù)據(jù)在內(nèi)存中的表示是完全相同的,并且可以直接共享。
Non-blittable類型包括Boolean、string、char以及所有的引用類型。如果一個結(jié)構(gòu)體包含了其中的一種類型,那么這個結(jié)構(gòu)體本身也是non-blittable的。
目前,C#編譯器通過檢查一個類型的結(jié)構(gòu)來推斷它是否是blittable的。這在過去引發(fā)了一些問題,因為有時增加一個新的字段會使得一個blittable類型變成non-blittable,然而在某些情況下,這種變化是致命的。
在Blittable類型提案中提到,使用關(guān)鍵字“blittable”能夠明確地將一個結(jié)構(gòu)體定義為blittable的。如果之后它的類型被修改為non-blittable的,編譯器就會報錯。
為了保證長期的向后兼容性,被定義為blittable的結(jié)構(gòu)中只能包含同樣明確定義為blittable的結(jié)構(gòu)。此外,結(jié)構(gòu)中不能使用StructLayout(LayoutKind.Auto)]。它表示的是結(jié)構(gòu)體在物理內(nèi)存中的排列方式。Explicit layout和sequential layout都是可以使用的。
注意:能夠修改一個結(jié)構(gòu)體的LayoutKind或者Pack被認為是一個突破性的改進,因為它改善了非托管代碼訪問結(jié)構(gòu)體的方式。
Microsoft擔心這個特性的過渡期。低層的類庫必須采用明確的blittable類型,更高層的類庫才能使用它們。
ref-like類型編譯期安全增強 [7.2提案]
這個特性也叫做“interior pointer”或者“類ref類型(ref-like types)”。該提案允許編譯器要求只能有特定的類型出現(xiàn)在棧上,比如Span
Span
在一些Span
Span
ref-like類型有如下幾種使用限制:
ref-like類型不能作為數(shù)組的元素
ref-like類型不能用作泛型類型參數(shù)
ref-like變量不能被裝箱
ref-like類型不能作為普通的非ref-like類型的字段
一些間接限制,例如不允許在異步方法中使用ref-like類型,異步方法不支持ref-like類型字段
事實上,這意味著ref-like類型僅能被用作參數(shù)、局部變量以及某些情況下的返回值。ref-like類型能夠包含另一個ref-like類型。
所有的ref-like類型都是只讀結(jié)構(gòu)體(詳見上方描述)。
像ref類型一樣,ref-like類型最終可能會成為“單賦值(single-assignment)”類型。該提案也提到了其他保障安全的方法,但是這個方法對編譯器的負擔是最小的。
C# 8.0原型
C# 8的兩個新特性已經(jīng)到達了原型階段:
可空引用類型(Nullable Reference Types):這個特性使得所有的引用類型在默認情況下都是不可空(non-nullable)的。如果能夠使用非空類型,你還會使用T(模板)嗎?就像你會使用可空結(jié)構(gòu)一樣。
默認接口方法(Default Interface Methods):這個特性使得C#引入了有限形式的多重繼承。
“C# 7.2和8.0有哪些功能”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!