這篇文章主要講解了“C#7.1有哪些特性”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“C#7.1有哪些特性”吧!
創(chuàng)新互聯(lián)服務(wù)項目包括宜秀網(wǎng)站建設(shè)、宜秀網(wǎng)站制作、宜秀網(wǎng)頁制作以及宜秀網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,宜秀網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到宜秀省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
自2003年以來,Microsoft首次考慮對C#使用帶小數(shù)點后位數(shù)的版本。當前暫定下一個版本是C# 7.1,其中有望包括:異步Main函數(shù)(Async Main)、默認表達式(Default Expression)、推導元組名(Infer Tuple Names)和使用泛型的模式匹配(Pattern-matching with Generics)等。
異步Main函數(shù)
最讓測試異步代碼的開發(fā)人員沮喪的,無疑是控制臺應用當前不支持異步入口點(EntryPoint)。雖然變通方法是編寫多行樣板代碼,但是這樣的模式依賴于對方法的非正常使用,難于理解。例如:
ublic static void Main() { MainAsync().GetAwaiter().GetResult(); } private static async Task MainAsync() { ... // 程序主代碼。 }
為解決這個問題,在“異步Main函數(shù)建議”中,添加了如下四個新的函數(shù)簽名,羅列了可能的入口點。
static Task Main() static TaskMain() static Task Main(string[]) static TaskMain(string[])
如果代碼中不存在另一個非異步Main函數(shù),那么只要給出一個上述的入口點函數(shù),編譯器就會生成所需的樣板代碼。唯一的限制是需要向后兼容。
Microsoft曾考慮允許“async void Main()”,但是這種做法會使編譯器更復雜,并且Microsoft總體上并不鼓勵在事件處理器之外使用“async void”。
默認值(即Nothing)
VB沒有表示“null”的關(guān)鍵字,這是C#和VB間的一個微妙的差別。但是VB有一個關(guān)鍵字“Nothing”。在語言技術(shù)規(guī)范中,對該關(guān)鍵字給出了如下說明:
Nothing是一個特殊的常值。它沒有類型,可轉(zhuǎn)換為類型系統(tǒng)中的任意類型,也包括類型參數(shù)。在轉(zhuǎn)換為某個特定類型后,它等價于該類型的默認值。
C#當前使用“default(T)”模式實現(xiàn)同一效果,但略為繁瑣,尤其是類的名字很長時。C# 7.1中將提供一個“默認常值”(Default Literal),其描述為:
這一類型的表達式可通過常值轉(zhuǎn)換為默認值或null值,隱式地轉(zhuǎn)換為any類型。
該類型向默認常值的推理與向null常值推理的工作機制一樣,除非允許any類型(不只是引用類型)。
在可以使用null的地方,通常也可以使用默認常值。這一做法被看成是C#建議中的一個倒退,可能因為人們通常會對兩個非常類似的方法完成同一件事大皺眉頭。在設(shè)計會議紀要中,就有人提出疑問:
我們是否正在挑起類型之爭?
一個使用默認常值的例子如下:
ImmutableArrayx = default; return default; void Method(ImmutableArrayarrayOpt = default) var x = new[] { default, ImmutableArray.Create(y) }; const int x = default; if (x == default) if (x is default) y = default as RefType //編譯器告警:總是null。 int i = default
下面例子給出的是對默認常值的非法使用:
const int? y = default; if (default == default) if (default is T) var i = default throw default
后者無疑是一個C#設(shè)計上的奇特構(gòu)件。在設(shè)計會議紀要中,給出了如下說法:
在C#中,允許開發(fā)人員拋出null。這會引發(fā)一個運行時錯誤,進而導致拋出一個NullReferenceException異常。因此,拋出NullReferenceException并非正大光明的,而是一種丑陋的模式。
完全沒有理由允許拋出默認值。我們并不認為用戶會感覺這是可行的,或是了解它的工作機制。
Microsoft并未引入默認常值,而是考慮通過擴展“null”實現(xiàn)同一效果。因為在VB中“nothing”和“null”是兩個不同的關(guān)鍵詞,所以在VB中可以這樣做。即使不使用關(guān)鍵字,VB中也具有null的概念。因此,開發(fā)人員可以看到“NothingReferenceException”這樣的異常。
感謝各位的閱讀,以上就是“C#7.1有哪些特性”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對C#7.1有哪些特性這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
網(wǎng)頁標題:C#7.1有哪些特性
轉(zhuǎn)載來于:http://chinadenli.net/article34/podipe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、網(wǎng)站維護、、網(wǎng)站內(nèi)鏈、響應式網(wǎng)站、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)