国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

C#7特性預(yù)覽

移動開發(fā)
在過去一年間,我們?yōu)樽x者展示了多個(gè)已考慮加入C# 7中的特性。在最近發(fā)布的 Visual Studio 15 預(yù)覽版中,微軟決定為用戶展現(xiàn)這些特性,使其成為C# 7 最終發(fā)布的一部分。

[[165106]]

在過去一年間,我們?yōu)樽x者展示了多個(gè)已考慮加入C# 7中的特性。在最近發(fā)布的 Visual Studio 15 預(yù)覽版中,微軟決定為用戶展現(xiàn)這些特性,使其成為C# 7 最終發(fā)布的一部分。

元組值類型

.NET 提供了一個(gè)元組(Tuple)類型,但具體在 C# 中使用時(shí)卻存在著各種各樣的問題。由于元組類型是一個(gè)引用類型,因此在一些對于性能相當(dāng)敏感的代碼中,你很可能會避免因使用它而造成 GC 的開銷。同時(shí),元組類型是不可變的,雖然這使跨線程共享變得更安全,但也意味著每次進(jìn)行變更都必須分配一個(gè)新的對象。

為了應(yīng)對這一問題,C# 7 將提供一個(gè)值類型的元組。這是一個(gè)可變類型,對那些重視性能的代碼來說,這種方式將更為高效。同時(shí),作為值類型,它在每次進(jìn)行分配時(shí)都會生成一個(gè)拷貝,因此幾乎沒有產(chǎn)生多線程問題的風(fēng)險(xiǎn)。

你可以通過以下語法創(chuàng)建一個(gè)元組:

  1. var result = (5, 20); 

你也可以選擇對元組中的值進(jìn)行命名,這一點(diǎn)并不是必須的,只是讓代碼具有更好的可讀性。

  1. var result = (count: 5, sum: 20); 

你可能會想,“很棒的特性,但我自己也能寫得出來”。但下一個(gè)特性才是重頭戲。

多返回值

在類C風(fēng)格的語言中,要在一個(gè)函數(shù)中返回兩個(gè)值始終是一件麻煩事。你只能選擇將結(jié)果封裝成某種結(jié)構(gòu),或是使用輸出參數(shù)。與許多函數(shù)式編程語言一樣,C#選擇了***種方式為你提供這一特性:

  1. (intint) Tally (IEnumerable<int> list) 

可以看到,在這里使用泛用的元組有一個(gè)基本問題:我們將無從得知每個(gè)字段的作用。因此,C#選擇通過一個(gè)編譯器花招對結(jié)果進(jìn)行命名:

  1. (int Count, int Sum) Tally (IEnumerable<int> list) 

我們在此需要強(qiáng)調(diào)一點(diǎn):C#并沒有生成一個(gè)新的匿名類型,你所獲得的仍舊是一個(gè)元組,但編譯器將假設(shè)它的屬性為 Count 和 Sum,而不是 Item1 和 Item2。所以,以下代碼行的作用都是等價(jià)的:

  1. var result = Tally (list); 
  2. Console.WriteLine (result.Item1); 
  3. Console.WriteLine (result.Count); 

請注意一點(diǎn),我們現(xiàn)在還不具備多賦值語法,如果這種語法最終實(shí)現(xiàn),那么它的用法可能是這樣的:

  1. (count, sum) = Tally (list); 

除了提供簡單的功能性函數(shù)之外,多返回值的實(shí)用性還體現(xiàn)在異步代碼的編寫上,因?yàn)樵?async 函數(shù)中是不允許使用 out 參數(shù)的。

模式匹配:改進(jìn)的 Switch 語法塊

VB 與函數(shù)式程序員對于 C# 抱怨得最多的一點(diǎn)就是 C# 中的 switch 語句功能十分有限。VB 開發(fā)者希望能夠進(jìn)行范圍匹配,而習(xí)慣了F#或 Haskell 的開發(fā)者則希望能夠使用分解式的模式匹配。C#打算同時(shí)提供這兩種特性。

在對類型進(jìn)行模式匹配時(shí),你可以創(chuàng)建一個(gè)變量以保存轉(zhuǎn)型的結(jié)果。舉例來說,在對一個(gè) System.Object 使用 switch 語句時(shí),你可以編寫以下代碼:

  1. case int x: 

如果該對象是數(shù)值類型,則變量x將得以賦值。否則的話,程序?qū)磸纳现料碌捻樞驒z查下一個(gè) case 語句塊。如果你想更具體地進(jìn)行匹配,還可以使用范圍檢查:

  1. case int x when x > 0: 
  2. case int y: 

在這個(gè)示例中,如果該對象是正整數(shù),則x代碼塊將被執(zhí)行。如果對象是 0 或負(fù)整數(shù),而y代碼塊將被執(zhí)行。

如果需要檢查 null 值,則只需使用以下語法:

  1. case null

模式匹配:分解

目前為止,我們僅僅展示了某種對 VB 中已有的特性所做的增量式改進(jìn),而模式匹配真正的強(qiáng)大之處在于分解,它可以將某個(gè)對象完全拆開,考慮一下以下語法:

  1. if (person is Professor {Subject is var s, FirstName is "Scott"}) 

這段代碼完成了兩件事:

  1. 它創(chuàng)建了一個(gè)本地變量s,將其賦值為((Professor) person) .Subject。
  2. 它執(zhí)行了一次相等性檢查 ((Professor) person) .FirstName == "Scott"。

如果將其用C# 6 代碼改寫則是這樣:

  1. var temp = person as Professor; 
  2. if (temp != null && temp.FirstName == "Scott"
  3.     var s = temp.Subject 

在最終發(fā)布中,我們預(yù)計(jì)能夠同時(shí)看到對 switch 語句塊的這兩種改進(jìn)。

引用返回

對于大數(shù)據(jù)結(jié)構(gòu)進(jìn)行引用傳遞比起值傳遞要快得多,因?yàn)楹笳咝枰獙φ麄€(gè)結(jié)構(gòu)進(jìn)行拷貝。與之類似,返回一個(gè)大數(shù)據(jù)結(jié)構(gòu)的引用一樣能夠提升速度。

在類似于C這樣的語言中,可以通過指針返回某個(gè)結(jié)構(gòu)的引用。這種方式會帶來一個(gè)常見的問題,即指針?biāo)赶虻膬?nèi)存可能會因?yàn)槟撤N原因而已經(jīng)被回收了。

C#通過使用引用的方式回避這一問題,引用本身是一個(gè)附加了規(guī)則的指針。最重要的一條規(guī)則是,你不能夠返回某個(gè)本地變量的引用。如果你嘗試這樣做,那么該變量所引用的棧信息在函數(shù)返回時(shí)就已經(jīng)變得不可訪問了。

在微軟的展示代碼中,它所返回的引用指向一個(gè)數(shù)組中的某個(gè)結(jié)構(gòu)。由于它實(shí)質(zhì)上是指向數(shù)組中某個(gè)元素的指針,因此隨后可以對數(shù)組本身進(jìn)行修改。舉例來說:

  1. var x = ref FirstElement (myArray) 
  2. x = 5; //MyArray[0] now equals 5 

這一語法的用例是對性能高度敏感的代碼,在大多數(shù)應(yīng)用中都無需使用這一特性。

二進(jìn)制字面值(Binary Literals)

此次發(fā)布還引入了一個(gè)小特性,即二進(jìn)制字面值。這一語法只是一個(gè)簡單的前綴而已,例如 5 可以表示為“0b0101”。這一特性的主要用例是設(shè)置基于 flag 的枚舉,以及創(chuàng)建位掩碼(bitmask),以用于與C風(fēng)格語言的互操作。

本地函數(shù)

本地函數(shù)是指在另一個(gè)函數(shù)中所定義的函數(shù)。***眼看來,本地函數(shù)似乎只是比匿名函數(shù)稍好的一種語法。但它實(shí)際上還存在幾個(gè)優(yōu)點(diǎn):

  • 首先,你無需為其分配一個(gè)委托以保存該函數(shù)。這不僅減少了內(nèi)存壓力,同時(shí)還允許編譯器對該函數(shù)進(jìn)行內(nèi)聯(lián)操作。
  • 其次,在創(chuàng)建閉包時(shí),也無需為其分配一個(gè)對象,因?yàn)樗軌蛑苯釉L問本地變量。這一點(diǎn)同樣能夠改善性能,因?yàn)樗矞p少了 GC 的壓力。

按照第二條規(guī)則推算,你將無法創(chuàng)建一個(gè)指向本地函數(shù)的委托。這一點(diǎn)對于代碼的組織其實(shí)是一個(gè)優(yōu)點(diǎn),因?yàn)槟銦o需創(chuàng)建獨(dú)立的函數(shù),并且將現(xiàn)有函數(shù)的狀態(tài)作為顯式的參數(shù)進(jìn)行傳遞。

部分類的改進(jìn)

***演示的特性是一種處理部分類的新方式。在過去,部分類的應(yīng)用是基于代碼生成優(yōu)先的概念而出現(xiàn)的。所生成的代碼將包含一系列部分方法,開發(fā)者可以選擇實(shí)現(xiàn)這些方法,以調(diào)整類的行為。

通過新的“replace”語法,開發(fā)者就多了一種新選擇,能夠以最直接的方式編寫代碼,隨后再引入代碼生成器,并重寫這些方法。以下將通過一個(gè)簡單的示例表現(xiàn)開發(fā)者的代碼編寫方式:

  1. public string FirstName {getset;} 

簡單又清晰,但完全不符合 XAML 風(fēng)格應(yīng)用的寫法。因此,代碼生成器將生成如下代碼:

  1. private string m_FirstName; 
  2. static readonly PropertyChangedEventArgs s_FirstName_EventArgs =new PropertyChangedEventArgs ("FirstName"
  3.  
  4. replace public string FirstName { 
  5.     get { 
  6.         return m_FirstName; 
  7.     } 
  8.     set { 
  9.         if (m_FirstName == value) 
  10.             return
  11.     m_FirstName = value; 
  12.     PropertyChanged?.Invoke (this, m_FirstName_EventArg); 

通過“replace”關(guān)鍵字,所生成的代碼將直接替換手寫的代碼,添加所缺失的功能。在這個(gè)示例中,我們甚至還能夠處理一些開發(fā)者經(jīng)常會忽略的麻煩的部分,例如對 EventArgs 對象進(jìn)行緩存。

雖然這個(gè)官方示例僅用于屬性變更通知,但這一技術(shù)還可用于各種“面向切面編程(AOP)”的場景,例如在代碼中注入日志記錄、安全檢查、參數(shù)校驗(yàn)以及其他各種繁瑣的樣板式代碼。

如果讀者想實(shí)際了解一下這些特性,可以觀賞 Channel 9 中的視頻“The Future of C#”。

責(zé)任編輯:倪明 來源: 博客園
相關(guān)推薦

2012-10-19 14:28:10

Ubuntu 12.1

2011-11-08 10:17:34

Ubuntu 12.0特性

2011-11-29 09:40:08

Linux Deepi特性

2021-09-08 10:36:01

Flink阿里云

2011-11-23 09:56:01

Linux Deepi

2009-06-15 09:35:48

Eclipse 3.5

2009-09-02 09:15:24

Windows Emb

2013-11-04 17:28:44

Android

2011-03-03 11:06:04

特性iOS 4.3

2009-03-10 19:02:04

Windows 7 Candiadate

2016-10-13 13:33:41

反射特性c#

2009-02-12 15:53:58

Windows 7預(yù)覽功能體驗(yàn)

2009-02-23 10:16:47

Windows 7 企業(yè)功能

2009-05-25 08:56:26

Windows 7壁紙硬件

2012-05-21 14:16:36

Fedora17新特性

2009-05-11 10:13:42

PHP 6命名空間Unicode

2009-07-31 09:29:05

GWT 2.0

2011-04-19 18:42:54

Windows Emb特性

2010-10-08 09:54:30

IBM AIX 7

2009-08-04 08:48:44

C#內(nèi)置特性
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

欧美艳星brazzers| 亚洲夜夜综合| 7777精品久久久大香线蕉| 欧美久久久网站| 日本亚洲三级在线| 按摩亚洲人久久| 国产视频一二三区| 红桃成人av在线播放| 久精品免费视频| 国产精品国产对白熟妇| 国偷自产视频一区二区久| 亚洲欧美日韩人成在线播放| 日韩av电影免费观看| 久久激情电影| 午夜剧场成人观在线视频免费观看| av免费观看一区二区| 国产精品乱码一区二区三区软件| 欧美韩国日本在线| 国产在线一区二区| 青娱乐国产91| 蜜桃久久av| 99精彩视频在线观看免费| 国产伦精品一区二区三区视频| 国产精品一区二区久久国产| 国产午夜精品久久久久免费视| 亚洲成a人片在线观看中文| 欧美伊人亚洲伊人色综合动图| 久久99国产精品成人| 国产乱子伦精品| 欧美色精品在线视频| 九色成人国产蝌蚪91| 色网综合在线观看| 欧美一级黑人aaaaaaa做受| 草草在线视频| 99亚洲伊人久久精品影院红桃| 日韩欧美一区视频| 成人观看视频| 成人免费的视频| 牛人盗摄一区二区三区视频| 91综合久久| 日本一区二区视频| 国产精品人人爽人人做我的可爱| 国产精品久久久久久一区二区| 视频在线日韩| 日韩精品一区二区在线| 日本不卡三区| 欧美午夜一区二区三区免费大片| 在线播放av更多| 国产精品美女久久久| 99精品全国免费观看视频软件| 成人午夜激情影院| 最近2019年中文视频免费在线观看 | 在线日本视频| 欧美日韩国产bt| 91精品国产乱码久久久久久久| 国产麻豆91精品| 国产精品久久久久久久天堂第1集 国产精品久久久久久久免费大片 国产精品久久久久久久久婷婷 | 嫩草影院国产精品| 欧美亚洲国产bt| 特级毛片在线| 韩国一区二区电影| 亚洲网站在线| 玩弄中年熟妇正在播放| 亚洲视频免费在线观看| 欧美黄色视屏| 亚洲一区二区黄| 亚洲精品国产偷自在线观看| av在线不卡一区| 肉色丝袜一区二区| 美臀av在线| 久久中文字幕在线视频| 石原莉奈在线亚洲二区| 你懂的视频在线免费| 中文字幕最新精品| 99riav1国产精品视频| 成人拍拍拍在线观看| 亚洲国产精品高清久久久| 国产欧美高清视频在线| 日韩国产精品毛片| 欧美日韩国产一级| 天天综合一区| 日本成在线观看| 久国内精品在线| 国内成人在线| 欧美日韩伦理片| 国产精品色视频| 色婷婷综合激情| 一区二区三区高清视频在线观看| 成人黄动漫网站| 国产不卡av在线免费观看| 91首页免费视频| 欧美成人一二区| 免费黄色一级网站| 精品国产一区二区三区四区四| 久久久久国产精品一区二区| 九色porny丨首页入口在线| 400部精品国偷自产在线观看| 日韩中文理论片| 亚洲精品中文在线观看| 国产精品白浆| 成色在线视频| 激情欧美一区二区三区中文字幕| 欧美一级高清片| 另类小说视频一区二区| 97se亚洲| 在线播放的av| 久久久久久99| 插插插亚洲综合网| 中文字幕一区二区三区在线播放 | 午夜精品久久久久久久久久蜜桃| 国产极品在线视频| 91九色在线观看| 日韩一区二区三区视频在线观看| 免费成人美女在线观看.| 久久91视频| 午夜大尺度福利视频| 日韩免费av片在线观看| 日韩精品专区在线| 国产精品每日更新在线播放网址| 在线亚洲伦理| 巨大荫蒂视频欧美大片| www精品久久| 91九色在线观看| 日韩av免费看| 日韩精品极品视频| 亚洲最快最全在线视频| 中文字幕精品三区| 午夜影院网站| 偷拍视频一区二区| 蜜桃精品久久久久久久免费影院| 欧美成人免费播放| 亚洲精品欧美激情| 久久久噜噜噜久久人人看 | 在线成人免费网站| 中文字幕v亚洲ⅴv天堂| 久久视频在线看| 欧美在线激情视频| 成人黄色网免费| 国产高清精品一区二区三区| 欧美性大战久久久久| 免费看黄在线看| 国产91大片| 国产特黄在线| 精品极品在线| 中国av一区| 男女男精品视频| 亚洲男同性恋视频| 亚洲高清免费观看高清完整版| 亚洲国产乱码最新视频| 26uuu成人网一区二区三区| 亚洲欧美日韩国产一区| 日本欧美韩国一区三区| 久久久国产精品午夜一区ai换脸| 久久久久久一二三区| 舔着乳尖日韩一区| 亚洲人成电影网| 国产精品日韩欧美| 日本成人黄色免费看| 欧美另类极限扩张| av超碰在线| 香蕉视频亚洲一级| 不卡在线一区| 久久综合九色综合欧美亚洲| 欧美色图片你懂的| 青青草成人在线| 亚洲一区二区高清视频| 视频免费观看| 国产精品原创视频| 老**午夜毛片一区二区三区| 色欧美乱欧美15图片| 国产精品久久久久久久9999| 国产福利视频在线播放| 欧美gv在线观看| 免费欧美日韩国产三级电影| 91精品中文字幕一区二区三区 | 一本大道色婷婷在线| 99久久精品费精品国产风间由美| 美女网站一区二区| 亚洲成人久久影院| 亚洲电影天堂av| 国产原创精品| 欧美美乳在线| 日韩精品不卡一区二区| 综合激情成人伊人| 国产精品91一区| 福利成人在线观看| 免费看欧美女人艹b| 最好看的2019年中文视频| 国产免费黄视频| 国内精品伊人久久久| 一区二区三区欧美在线观看| 国产亚洲欧美日韩一区二区| 精品国产福利| 国产高清av在线| 天天综合精品| 欧洲国产伦久久久久久久| 欧美精品久久久久| 日日摸日日碰夜夜爽av| 久久久一本精品| 成人美女在线视频|