精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

C#歷史回顧及C# 4.0新特性一覽

開發(fā) 后端
本文對C#歷史做了一番簡單的回顧,并介紹了幾個C# 4.0的新特性。C#4.0增加了動態(tài)語言的特性,從里面可以看到很多javascript、python這些動態(tài)語言的影子。

C#歷史回顧

回顧C#發(fā)展的歷史,C# 1.0完全是模仿Java,并保留了C/C++的一些特性如struct,新學者很容易上手;C# 2.0加入了泛型,也與Java1.5的泛型如出一轍;C# 3.0加入了一堆語法糖,并在沒有修改CLR的情況下引入了Linq,簡直是神來之筆,雖然很多項目出于各種各樣如性能之類的原因沒有采用,但非常適合小型程序的快速開發(fā),減輕了程序員的工作量,也提高了代碼的可讀性;C# 4.0增加了動態(tài)語言的特性,從里面可以看到很多javascript、python這些動態(tài)語言的影子。雖然越來越偏離靜態(tài)語言的道路,但從另一個角度來說,這些特性也都是為了提高程序員的生產(chǎn)力。至于被接受與否,還是讓時間來說話吧。

C#進化之道 

PS:這里面還有一點版本號的小插曲——VS2008所對應的.Net Framework是3.5,C#是3.0,CLR是2.0,及其混亂,MS終于下決心在VS2010中把這三個版本號都統(tǒng)一成了4.0,于是CLR3不知所終……

C# 4.0新特性:Dynamically Typed Object

C#4.0加入了dynamic關鍵字,可以申明一個變量的static類型為dynamic(有點繞口)。

在3.0及之前,如果你不知道一個變量的類型,而要去調(diào)用它的一個方法,一般會用到反射:

  1. object calc = GetCalculator();  
  2. Type calcType = calc.GetType();  
  3. object res = calcType.InvokeMember("Add",  
  4. BindingFlags.InvokeMethod, null,  
  5. new object[] { 10, 20 });  
  6. int sum = Convert.ToInt32(res); 

有了dynamic,就可以把上面代碼簡化為:

  1. dynamic calc = GetCalculator();  
  2. int sum = calc.Add(10, 20); 

使用dynamic的好處在于,可以不去關心對象是來源于COM, IronPython, HTML DOM或者反射,只要知道有什么方法可以調(diào)用就可以了,剩下的工作可以留給runtime。下面是調(diào)用IronPython類的例子:

  1. ScriptRuntime py = Python.CreateRuntime();  
  2. dynamic helloworld = py.UseFile("helloworld.py");  
  3. Console.WriteLine("helloworld.py loaded!"); 

dynamic也可以用在變量的傳遞中,runtime會自動選擇一個最匹配的overload方法。

這里有一個demo:把一段javascript代碼拷到C#文件中,將var改成dynamic,function改成void,再改一下構造函數(shù)的調(diào)用方式(new type()改為win.New.type()),去掉javascript中的win.前綴(因為這已經(jīng)是C#的方法了),就可以直接運行了。

dynamic的實現(xiàn)是基于IDynamicObject接口和DynamicObject抽象類。而動態(tài)方法、屬性的調(diào)用都被轉為了GetMember、Invoke等方法的調(diào)用。

  1. public abstract class DynamicObject : IDynamicObject  
  2. {  
  3. public virtual object GetMember(GetMemberBinder info);  
  4. public virtual object SetMember(SetMemberBinder info, object value);  
  5. public virtual object DeleteMember(DeleteMemberBinder info);   public virtual object UnaryOperation(UnaryOperationBinder info);  
  6. public virtual object BinaryOperation(BinaryOperationBinder info, object arg);  
  7. public virtual object Convert(ConvertBinder info);   public virtual object Invoke(InvokeBinder info, object[] args);  
  8. public virtual object InvokeMember(InvokeMemberBinder info, object[] args);  
  9. public virtual object CreateInstance(CreateInstanceBinder info, object[] args);   public virtual object GetIndex(GetIndexBinder info, object[] indices);  
  10. public virtual object SetIndex(SetIndexBinder info, object[] indices, object value);  
  11. public virtual object DeleteIndex(DeleteIndexBinder info, object[] indices);   public MetaObject IDynamicObject.GetMetaObject();  

C# 4.0新特性:Named and optional parameters

這似乎不是什么很難實現(xiàn)或很新穎的特性,只要編譯器的支持就可以(VB很早就支持了)。估計加入的原因是群眾的呼聲太高了。

帶有可選參數(shù)方法的聲明:

  1. public StreamReader OpenTextFile(  
  2. string path,  
  3. Encoding encoding = null,  
  4. bool detectEncoding = true,  
  5. int bufferSize = 1024); 

命名參數(shù)必須在最后使用:

  1. OpenTextFile("foo.txt", Encoding.UTF8, bufferSize: 4096); 

順序不限:

  1. OpenTextFile(bufferSize: 4096, path: "foo.txt", detectEncoding: false); 

Improved COM Interoperability

在C#中在調(diào)用COM對象如office對象時,經(jīng)常需要寫一堆不必要的參數(shù):

  1. object fileName = "Test.docx";  
  2. object missing  = System.Reflection.Missing.Value;  
  3. doc.SaveAs(ref fileName,  
  4. ref missing, ref missing, ref missing,  
  5. ref missing, ref missing, ref missing,  
  6. ref missing, ref missing, ref missing,  
  7. ref missing, ref missing, ref missing,  
  8. ref missing, ref missing, ref missing); 

4.0中就可以直接寫成:

  1. doc.SaveAs("Test.docx"); 

C#4.0對COM交互做了下面幾方面的改進:

  1. Automatic object -> dynamic mapping  
  2. Optional and named parameters  
  3. Indexed properties  
  4. Optional “ref” modifier  
  5. Interop type embedding (“No PIA”) 

對第1點和第5點的簡單解釋如下:

在COM調(diào)用中,很多輸入輸出類型都是object,這樣就必須知道返回對象的確切類型,強制轉換后才可以調(diào)用相應的方法。在4.0中有了dynamic的支持,就可以在導入這些COM接口時將變量定義為dynamic而不是object,省掉了強制類型轉換。

PIA(Primary Interop Assemblies)是根據(jù)COM API生成的.Net Assembly,一般體積比較大。在4.0中運行時不需要PIA的存在,編譯器會判斷你的程序具體使用了哪一部分COM API,只把這部分用PIA包裝,直接加入到你自己程序的Assembly里面。

C# 4.0新特性:Co- and Contra-Variance

實在是不知道怎么翻譯這兩個詞。

(感謝Ariex,徐少俠,AlexChen的提示,應翻譯為協(xié)變和逆變,http://msdn.microsoft.com/zh-cn/library/ms173174(VS.80).aspx

在C#中,下面的類型轉換是非法的:

  1. IList< string> strings = new List< string>();  
  2. IList< object> objects = strings; 

因為你有可能會這樣做,而編譯器的靜態(tài)檢查無法查出錯誤:

  1. objects[0] = 5;  
  2. string s = strings[0]; 

4.0中在聲明generic的Interface及Delegate時可以加in及out關鍵字,如:

  1. public interface IEnumerable< out T> : IEnumerable  
  2. {  
  3. IEnumerator< T> GetEnumerator();  
  4. }  
  5. public interface IEnumerator< out T> : IEnumerator  
  6. {  
  7. bool MoveNext();  
  8. T Current { get; }  
  9. }  
  10. public interface IComparer< in T>  
  11. {  
  12. public int Compare(T left, T right);  

out關鍵字的意思是說IEnumerable< T>中T只會被用在輸出中,值不會被改變。這樣將IEnumerable< string>轉為IEnumerable< object>類型就是安全的。

in的意思正好相反,是說IComparer< T>中的T只會被用在輸入中,這樣就可以將IComparer< object>安全的轉為IComparer< string>類型。

前者被稱為Co-Variance, 后者就是Contra-Variance。

.Net4.0中使用out/in聲明的Interface:

  1. System.Collections.Generic.IEnumerable< out T>  
  2. System.Collections.Generic.IEnumerator< out T>  
  3. System.Linq.IQueryable< out T>  
  4. System.Collections.Generic.IComparer< in T>  
  5. System.Collections.Generic.IEqualityComparer< in T>  
  6. System.IComparable< in T> 

Delegate:

  1. System.Func< in T, …, out R>  
  2. System.Action< in T, …>  
  3. System.Predicate< in T>  
  4. System.Comparison< in T>  
  5. System.EventHandler< in T> 

C# 4.0新特性:Compiler as a Service

4.0中增加了與編譯器相關的API,這樣就可以將字符串作為代碼動態(tài)編譯執(zhí)行,跟javascript好像。

Video的最后,Anders做了一個很酷的demo,大概只用了二三十行代碼,就實現(xiàn)了在控制臺中直接執(zhí)行C#語句,定義并調(diào)用函數(shù),動態(tài)創(chuàng)建windows form,添加button等功能,看起來完全不遜色于Python,Ruby之類語言的控制臺。

沉寂了n年之后,CLR終于要出新版本了,這回Jeffrey Richter大俠沒有借口不出新版的CLR via C#了吧:)

本文來自張國良的專欄《c# 4.0新特性一覽》

【編輯推薦】

  1. C# 4.0中的協(xié)變和逆變
  2. .NET 4.0 Beta 2將引入新的網(wǎng)絡功能 修復大量Bug
  3. C# 4.0 Dynamic關鍵字全解析
  4. .NET 4.0 Beta 1新增STM特性概覽
  5. 全面總結.NET 4.0新特性:C#和VB.NET的取長補短
責任編輯:yangsai 來源: 張國良的專欄
相關推薦

2009-08-19 16:51:14

C# 4.0 dyna

2009-05-26 09:28:22

C# 4.0dynamic動態(tài)類型

2009-08-03 13:55:03

C#基礎知識

2009-05-26 11:15:31

C# 4.0dynamicVisual Stud

2010-01-26 17:44:32

Visual C++開

2009-08-26 17:10:09

C# 3.5新特性

2016-10-13 13:33:41

反射特性c#

2013-10-18 14:23:21

Ubuntu 13.1Kbuntu 13.1

2011-05-26 10:27:37

Fedora 15

2010-08-17 09:57:39

C#

2009-08-27 16:24:48

擴展方法C# 3.0新特性

2025-05-07 08:30:00

2009-08-19 16:50:32

Visual C#C#語言特性

2010-05-25 08:34:10

C# 4.0

2009-08-31 14:45:07

Visual C# 3

2009-10-20 15:03:29

ExpandoObje

2011-01-14 10:27:18

C#.netasp.net

2009-08-04 08:48:44

C#內(nèi)置特性

2010-07-20 10:19:06

Wine 1.2

2009-05-25 15:42:03

Visual StudC#
點贊
收藏

51CTO技術棧公眾號

亚洲欧洲99久久| 紧缚捆绑精品一区二区| 国产亚洲福利一区| 午夜免费视频网站| 午夜裸体女人视频网站在线观看| 国产精品免费看片| 国产精品欧美久久| 中文字幕1区2区3区| 国内精品99| 中文字幕精品www乱入免费视频| 欧美国产日韩在线视频| 日本不卡网站| 亚洲欧美另类小说视频| 另类欧美小说| 国产女人高潮时对白| 久久中文字幕一区二区三区| 欧美成人午夜影院| 综合 欧美 亚洲日本| 日韩高清一级| 日韩亚洲电影在线| 岛国毛片在线播放| 欧美xo影院| 性做久久久久久免费观看欧美| 亚洲欧美日韩精品在线| 婷婷综合激情网| 国产剧情在线观看一区二区| 国产精品九九九| 精品国产乱码一区二区| 欧美激情精品久久久六区热门| 亚洲性视频网址| 国产麻豆xxxvideo实拍| 大胆国模一区二区三区| 欧美日韩在线播| 日韩中文字幕组| 欧美xxxhd| 亚洲一本大道在线| 国产91porn| 快射av在线播放一区| 久久久久久**毛片大全| 国内精品视频免费| 蜜臀久久精品久久久久| 国产剧情av麻豆香蕉精品| 国产欧美日韩视频| 综合久久中文字幕| 奇米888四色在线精品| 日韩av不卡电影| 天堂网中文字幕| 午夜一区在线| 秋霞av国产精品一区| 成人免费看片98欧美| 亚洲精品婷婷| 91高清免费在线观看| 日韩免费不卡视频| 99伊人成综合| 青草热久免费精品视频| 精品人妻一区二区三区免费看| 国产女优一区| 国产国语videosex另类| 中文字幕人妻丝袜乱一区三区| 日韩中文字幕区一区有砖一区| 日韩av免费在线看| 中国老头性行为xxxx| 久久精品999| 亚洲一区二区日本| 亚洲精品无码专区| 99视频超级精品| 欧美精品七区| 在线看的av网站| 亚洲天天做日日做天天谢日日欢| 国产成人免费高清视频| 欧洲精品二区| 色综合久久中文字幕综合网| 欧美三级理论片| www 久久久| 日韩免费高清av| 欧美一区二区三区成人精品| 国产欧美日韩精品一区二区免费| 在线视频欧美日韩| 丰满少妇被猛烈进入一区二区| 欧美日韩综合| 欧洲午夜精品久久久| 国产偷人爽久久久久久老妇app| 久久99最新地址| 97se国产在线视频| 国产视频在线看| 亚洲欧美国产三级| 国产在线观看福利| 日韩黄色三级在线观看| 亚洲级视频在线观看免费1级| 草草影院第一页| 久久精品免费一区二区三区| 午夜精品一区二区三区在线视| 国产成人麻豆免费观看| 韩国午夜理伦三级不卡影院| 精品网站在线看| 美女写真理伦片在线看| 精品久久久久久久久久久| 亚洲 欧美 日韩系列| 一区二区中文字幕在线观看| 亚洲天堂男人的天堂| 国产高潮流白浆| 视频一区视频二区中文| 成人午夜电影免费在线观看| 超碰免费97在线观看| 亚洲在线免费播放| 日本美女高潮视频| 女人抽搐喷水高潮国产精品| 久久精品青青大伊人av| 日韩av在线天堂| 紧缚捆绑精品一区二区| 日本不卡一区| 女人高潮被爽到呻吟在线观看| 欧美精品久久久久久久多人混战 | 伊人久久大香线蕉精品| 9765激情中文在线| 欧美一区二区视频网站| 人妻av无码一区二区三区| 在线欧美亚洲| 亚洲一区中文字幕在线观看| 超碰在线影院| 色婷婷综合激情| 182在线视频| 最新国产精品| 成人黄色av网站| www.亚洲.com| 色菇凉天天综合网| 偷偷色噜狠狠狠狠的777米奇| 欧美激情视频一区二区三区在线播放| 国产精品99导航| 视频国产一区二区三区| 亚洲国产精品自拍| 免费黄色在线播放| 影视一区二区| 91人成网站www| 毛片免费不卡| 欧美喷潮久久久xxxxx| 国产精品国产三级国产专业不| 国产亚洲午夜| 久久久综合亚洲91久久98| heyzo高清在线| 欧美r级电影在线观看| 青青草手机视频在线观看| 狠狠色丁香婷婷综合| 一区二区三区四区在线视频| 91tv亚洲精品香蕉国产一区| 亚洲天堂第二页| 天堂网一区二区| 国产日韩欧美一区二区三区综合 | 极品少妇xxxx精品少妇偷拍| 亚洲国产日韩美| 国产亚洲精彩久久| 最近2019好看的中文字幕免费| а中文在线天堂| 久久精品人人做人人综合| 国产精品第12页| 欧美肉体xxxx裸体137大胆| 国产精品久久久久久久久免费看| 精品久久久久一区二区三区| 欧美在线你懂得| 国产又粗又猛又爽又黄的视频小说 | 尤物九九久久国产精品的分类| 国产伦精品一区二区三区视频我| 国产亚洲精久久久久久| 精品999在线| 91精品婷婷色在线观看| 91免费视频网站| 俺来俺也去www色在线观看| 亚洲成人黄色在线观看| 亚洲影院在线播放| 国产精品免费人成网站| 91精产国品一二三| 国产日产高清欧美一区二区三区| 欧美精品欧美精品| 亚洲男女网站| 久久久久日韩精品久久久男男| 五月婷婷深深爱| 欧美综合天天夜夜久久| 日韩在线观看视频一区二区| 不卡av免费在线观看| 韩国日本美国免费毛片| 亚洲成av人片乱码色午夜| 国产精品视频入口| 日韩中文视频| 欧美美女操人视频| 久久米奇亚洲| 日韩一级完整毛片| 黄瓜视频在线免费观看| 亚洲欧美激情小说另类| 丰满圆润老女人hd| 国产精品中文字幕欧美| 国产男女无遮挡| 91精品国产成人观看| 久久人人九九| 免费欧美网站| 国产精品27p| 国产色婷婷在线| 色偷偷综合社区| 深夜影院在线观看| 91麻豆精品国产91久久久| 亚洲欧美精品一区二区三区| 亚洲三级免费观看| 一本加勒比北条麻妃| 国产一区二区在线观看视频| 日韩精品一区二区三区不卡| 亚洲国产一成人久久精品| 欧美日韩一区在线播放| 一区二区视频| 成人免费大片黄在线播放| 亚洲欧美韩国| 欧美极品少妇xxxxx| 日韩欧美小视频| 亚洲欧美精品一区| 农村少妇久久久久久久| 欧美老人xxxx18| 337p粉嫩色噜噜噜大肥臀| 亚洲电影一区二区三区| 日本黄色片免费观看| 国产欧美精品区一区二区三区| 欧美熟妇精品一区二区蜜桃视频| 久久国产精品免费| 日本va中文字幕| 国产精品久久国产愉拍| 欧美黄网在线观看| 综合精品久久| 中文字幕一区综合| 日本一区二区高清不卡| 欧日韩一区二区三区| 国产精品x8x8一区二区| 91视频免费在线观看| 国产日韩欧美中文在线| 国产精品自产拍在线观| 成人视屏在线观看| 68精品久久久久久欧美| hd国产人妖ts另类视频| 久久久久五月天| 9999在线视频| 国内自拍欧美激情| 98色花堂精品视频在线观看| 久久久久国产精品免费网站| a黄色片在线观看| 久久视频这里只有精品| 麻豆91在线| 久久在线视频在线| 超碰caoporn久久| 久久天堂av综合合色| 国产原创精品视频| 欧美精品免费在线观看| 欧美日韩在线视频免费观看| 欧美国产极速在线| 波多野结依一区| 欧美一级大片在线观看| 波多视频一区| 国产精品久久不能| 男人亚洲天堂| 91原创国产| 久久久久高潮毛片免费全部播放| 精品久久精品久久| 久久97视频| 亚洲人体一区| 真实国产乱子伦精品一区二区三区| 欧美精品一区二区性色a+v| 欧美成人嫩草网站| 成人免费观看cn| 久久久久免费| 久久6免费视频| 成人自拍视频在线观看| 玖草视频在线观看| 国产欧美视频一区二区三区| 日本少妇aaa| 夜夜操天天操亚洲| 免费黄色网址在线| 欧美浪妇xxxx高跟鞋交| xxxx国产精品| 亚洲另类xxxx| 美女黄视频在线观看| 午夜精品久久久久久久久久久久久| 中文字幕乱码在线播放| 国产成人精品免费久久久久| 四虎精品在线观看| 国产视频在线观看一区| 精品不卡一区| 日韩成人三级视频| 日韩在线一区二区| 成人做爰69片免费| 国产日本欧洲亚洲| 久久精品国产亚洲AV无码男同| 色综合 综合色| 国产又大又黑又粗| 亚洲精品一区二区三区蜜桃下载| 九九热视频在线观看| 欧美成人一二三| 自拍网站在线观看| 91视频-88av| 欧美日韩123| 国产91在线亚洲| 奇米影视在线99精品| 中文字幕一区二区人妻电影丶| 日本一区二区高清| 日本一级淫片色费放| 欧美日韩美少妇| 三级做a全过程在线观看| 久久久国产精品x99av| 成人性生活av| 国产精品久久久久久久久久久久冷| 国内精品久久久久久久久电影网| 青青青在线观看视频| 日本伊人精品一区二区三区观看方式| 国产精品91av| 国产精品久久久久久久午夜片| 日韩污视频在线观看| 7777精品伊人久久久大香线蕉经典版下载 | 国产亚洲一区二区在线| 国产美女高潮在线观看| 亚洲自拍小视频免费观看| 成人精品视频| 欧美日韩中文在线视频| 丁香婷婷深情五月亚洲| 国产黄色片在线免费观看| 欧美午夜一区二区三区| 黄色大片在线看| 国产91精品久久久久久| 国产精品tv| 精品成在人线av无码免费看| 国产在线不卡一区| 日本少妇aaa| 欧美精品免费视频| 在线观看精品一区二区三区| 国产成人综合亚洲| 亚洲午夜久久| 日本精品一区二区三区四区| jlzzjlzz国产精品久久| 国产一级视频在线| 欧美一级高清大全免费观看| 欧美私人网站| 91精品国产综合久久香蕉的用户体验| 精品国产1区| 九九九在线观看视频| 久久久www成人免费毛片麻豆 | 少妇av片在线观看| 色综合天天综合网天天狠天天| 亚洲欧美丝袜中文综合| 欧美亚洲成人免费| 午夜欧洲一区| 日本999视频| 国产欧美一区二区精品性色| 嫩草影院一区二区三区| 国产亚洲精品一区二区| 麻豆精品蜜桃| 一级日韩一区在线观看| 国产尤物一区二区| 538精品在线观看| 精品免费99久久| 17videosex性欧美| 欧美精品一区二区三区在线四季 | 亚洲va欧美va国产综合剧情| 午夜精品久久久久久久四虎美女版| 亚洲精品成人在线播放| 亚洲男女一区二区三区| 亚洲av无码一区二区三区性色| 久久免费精品日本久久中文字幕| 美女视频亚洲色图| 热久久精品国产| 自拍偷拍欧美精品| 国产婷婷在线视频| 午夜精品99久久免费| 九九免费精品视频在线观看| 男女无套免费视频网站动漫| 亚洲视频一区二区在线观看| 亚洲av色香蕉一区二区三区| 91高清视频在线免费观看| 免费欧美视频| 亚洲精品免费一区亚洲精品免费精品一区 | 精品乱色一区二区中文字幕| 日韩和欧美一区二区三区| 老司机成人免费视频| 亚洲国产成人精品久久| 蜜桃精品在线| 91精品一区二区三区四区| 97久久精品人人澡人人爽| 日批视频免费观看| 色综合导航网站| 久久99久久人婷婷精品综合| 成人性生交视频免费观看| 精品久久久久久久中文字幕 | 亚洲另类第一页| 亚洲一区二区三区四区在线免费观看 | 台湾佬成人网| 青青草综合视频| 久久精品一级爱片| 亚洲第一天堂影院| 国产精品白嫩美女在线观看| 午夜欧美视频| 国产又大又粗又爽的毛片| 欧美mv日韩mv亚洲| 国产一区二区三区四区五区3d| 黄页网站在线观看视频| 国产精品第一页第二页第三页| 色久视频在线播放| 亚洲在线视频福利| 日韩电影免费在线|