精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

国内av免费观看| 欧美13一14另类| 久久机热这里只有精品| 盗摄牛牛av影视一区二区| 欧美日韩激情小视频| 亚洲 国产 日韩 综合一区| 91丨porny丨在线中文| 精品999网站| 在线观看国产精品日韩av| 日韩av福利在线观看| 丝袜老师在线| 亚洲女女做受ⅹxx高潮| 鲁片一区二区三区| 国产伦精品一区二区三区免.费| 国内精品久久久久久久影视蜜臀| 亚洲视频精品在线| 亚洲欧美综合视频| 91精品福利观看| 欧美性猛交xxxx免费看漫画| 韩国黄色一级大片| 九九在线视频| 成人性生交大片免费看中文| 国产精自产拍久久久久久蜜| 久久亚洲精品国产| 国内精品久久久久久久97牛牛| 这里只有精品在线播放| 精品国产av色一区二区深夜久久| 先锋影音一区二区| 欧洲精品在线观看| 男人揉女人奶房视频60分| 午夜小视频福利在线观看| 国产欧美一区二区三区在线看蜜臀| 国产精品亚洲综合| 国产av精国产传媒| 美女免费视频一区二区| 日本道色综合久久影院| 日韩三级视频在线| 亚洲国产老妈| 日韩在线观看免费| 欧美a在线播放| 蜜臀久久99精品久久一区二区 | 中文字幕高清在线免费播放| 国产精品v亚洲精品v日韩精品 | 九色porny丨国产首页在线| 亚洲视频 欧洲视频| 亚洲国产精品毛片| 777电影在线观看| 国产视频911| 日韩hmxxxx| 国产高清免费av在线| 久久久精品天堂| 久久国产精品一区二区三区四区| 人妻丰满熟妇av无码区hd| 成人禁用看黄a在线| 爱情岛论坛亚洲入口| www.成人精品| 成人午夜免费视频| 国产精品一区二区你懂得| 亚洲第一色网站| 粉嫩欧美一区二区三区高清影视| 99视频在线| 日本美女一级片| 97久久久精品综合88久久| 精品日本一区二区| 久久久久久久久亚洲精品| 久久久久久日产精品| 亚洲va韩国va欧美va精四季| aaa日本高清在线播放免费观看| 欧美国产一区视频在线观看| 亚洲日本无吗高清不卡| 欧美jizz18性欧美| 一区二区三区免费看视频| av在线观看地址| 午夜av不卡| 在线观看国产日韩| 手机av在线免费| 视频在线一区| 日韩av在线免费播放| 精品无码人妻一区| 视频在线不卡免费观看| 久久资源免费视频| 日韩精品人妻中文字幕| 午夜综合激情| 国产日韩欧美夫妻视频在线观看| 国产激情久久久久久熟女老人av| 成人免费高清在线| 色姑娘综合网| av观看在线| 黑人欧美xxxx| 亚洲第一天堂久久| 猫咪成人在线观看| 中文字幕精品久久久久| 久久久久噜噜噜亚洲熟女综合| 一区二区高清| 国产一区二区在线播放| 亚洲精品一级片| 国产免费成人在线视频| 91午夜在线观看| 成人自拍视频网| 精品久久久三级丝袜| 国产免费一区二区三区网站免费| 99精品全国免费观看视频软件| 韩国三级日本三级少妇99| 在线观看亚洲黄色| 成人短视频下载| 一区二区三区视频| 最新日韩精品| 精品噜噜噜噜久久久久久久久试看| 国产熟妇搡bbbb搡bbbb| 欧美a级在线| 国产精品久久久久久久天堂 | 国产在线麻豆精品观看| 狼狼综合久久久久综合网| av网站在线免费看推荐| 欧美亚洲一区三区| 无码成人精品区在线观看| 久久精品国产99久久| 日本高清久久天堂| 国产77777| 亚洲男人都懂的| 中文字幕av专区| 亚洲另类av| 992tv成人免费视频| 国产成人精品亚洲精品色欲| 欧美激情在线一区二区| 国产在线青青草| 国产91精品入| 久操成人在线视频| 国产美女永久免费| 国产精品嫩草99a| 欧美一级裸体视频| 亚洲都市激情| 91a在线视频| 天天干天天舔天天射| 亚洲综合999| 性色av浪潮av| 国产高清一区二区| 国产噜噜噜噜久久久久久久久| 黄色软件在线| 91久久久免费一区二区| 蜜桃av免费看| 日韩精品一级二级| 色综合久久88色综合天天提莫| 小视频免费在线观看| 日韩国产欧美精品一区二区三区| 国产一级特黄a高潮片| 高清在线成人网| www.日本在线播放| 欧美调教网站| 欧美亚洲免费电影| 国产免费av在线| 欧洲精品中文字幕| 国精品人伦一区二区三区蜜桃| 美女一区二区三区| 国产又粗又爽又黄的视频| 欧美.com| 久久免费视频在线观看| 天堂中文网在线| 狠狠色狠狠色综合日日小说| 欧美精品欧美极品欧美激情| 日韩午夜在线电影| 欧美亚洲爱爱另类综合| 欧美日韩精品免费观看视欧美高清免费大片 | 国产精品灌醉下药二区| 女人高潮一级片| 欧美日韩三级| 国产一级特黄a大片99| 成人动漫一区| 日韩中文理论片| 午夜精品一区二区三| 精品国产乱码久久久久久虫虫漫画 | 亚洲一区二区电影| 午夜免费日韩视频| 国产免费av在线| 91精品黄色片免费大全| 国产精选第一页| 日本一区二区成人| 香蕉视频xxxx| 母乳一区在线观看| 亚洲一区三区电影在线观看| 电影一区二区在线观看| 国产999在线| 在线电影福利片| 日韩国产激情在线| 国产精品久久久久久久久久久久久久久久 | 日韩第二十一页| 久久久久久久久久婷婷| 精品美女视频在线观看免费软件| 欧美日本不卡视频| 欧美成人aaaaⅴ片在线看| 中文字幕乱码亚洲精品一区| 杨幂一区二区国产精品| 久久都是精品| 欧美性猛交内射兽交老熟妇| 久久99高清| av免费观看久久| 嫩草伊人久久精品少妇av杨幂| 久久综合免费视频| 免费在线观看一级毛片| 日韩一区二区在线观看视频播放| 中文字幕一区在线播放| 亚洲一区二区三区四区不卡| 亚洲色图日韩精品| av亚洲精华国产精华精华| 污网站免费在线| 91久久视频| 国产成人免费高清视频| 精品av一区二区| 国产精品一区二| 国产精品一级在线观看| 国产91在线播放| 黄频免费在线观看| 欧美另类暴力丝袜| 日本福利在线| 亚洲人成电影在线| 五月婷在线视频| 欧美变态tickle挠乳网站| 一区二区三区精| 日本精品一区二区三区高清| 日韩xxx高潮hd| 夜夜爽夜夜爽精品视频| 久久国产波多野结衣| 国产欧美一区二区在线| 国产精品无码网站| 成人国产一区二区三区精品| 天堂在线精品视频| 激情五月婷婷综合| 久久撸在线视频| 蜜臂av日日欢夜夜爽一区| 热久久精品国产| 制服诱惑一区二区| av在线com| 欧美freesex交免费视频| 五月天综合婷婷| 99久久精品国产亚洲精品 | 成人激情视频在线播放| 亚洲天堂一区二区| 国产成人精品电影久久久| 中文字幕乱码中文乱码51精品| 91大神福利视频在线| www成人免费观看| 91精品国产成人| 欧美另类老肥妇| 国产91精品高潮白浆喷水| 成年男女免费视频网站不卡| 久久久久久久久久久久av| 成人高潮aa毛片免费| 久久久久久999| 国产资源在线观看入口av| 欧美亚洲国产日韩2020| 一区二区三区短视频| 国产91网红主播在线观看| 日本精品另类| 成人福利免费观看| 疯狂欧洲av久久成人av电影| 91传媒免费看| 91精品入口| 开心色怡人综合网站| 国内精品久久久久久久影视简单| 视频一区视频二区视频| 欧美jizz| 丁香色欲久久久久久综合网| 亚洲看片免费| 欧美在线观看视频网站| 麻豆精品视频在线| 国内精品国产三级国产aⅴ久| 成人激情免费电影网址| 草草地址线路①屁屁影院成人| 久久久久久久综合日本| 国产乱子轮xxx农村| 一区二区三区日韩欧美| 国产成人在线观看网站| 91黄视频在线| hs视频在线观看| 日韩av网站在线| av电影在线观看网址| 成年人精品视频| 国产h片在线观看| 国产精品成人免费视频| 久久精品免视看国产成人| 久久精品女人的天堂av| 精品美女视频| 黄网站色视频免费观看| 国产精品久久久久久久久久妞妞 | 粉嫩高潮美女一区二区三区 | 国产精品久久久久久户外露出| 国产一二三区精品| 色综合色狠狠天天综合色| 一级特黄aaa大片| 亚洲高清免费观看高清完整版| 成人精品一区| 国内精品一区二区三区四区| 外国电影一区二区| 国产精品一码二码三码在线| 日韩在线精品| 免费国产黄色网址| 激情综合色播激情啊| 少妇久久久久久久久久| 亚洲午夜三级在线| 中文字幕在线播出| 国产视频在线观看一区二区| 麻豆传媒视频在线观看| 欧美一区二三区| 亚洲国产高清在线观看| 视频一区在线免费观看| 亚洲乱码视频| 国产精品久久久久野外| 国产精品少妇自拍| 国产成人精品网| 精品国产一区二区三区不卡| 天天在线视频色| 情事1991在线| 九九热播视频在线精品6| 日韩视频一二三| 另类人妖一区二区av| www.色天使| 亚洲丰满少妇videoshd| av中文字幕免费在线观看| 在线观看亚洲区| 小黄鸭精品aⅴ导航网站入口| 国产精品一区在线观看| 亚洲一区在线| 免费黄频在线观看| 国产精品色噜噜| 精品国产青草久久久久96| 国产视频一区在线| 女海盗2成人h版中文字幕| 国产乱码精品一区二区三区日韩精品| 在线成人直播| 中文字幕日韩久久| 国产精品高潮呻吟久久| 亚洲一区二区三区高清视频| 亚洲新声在线观看| 成人欧美大片| 麻豆久久久9性大片| 国产欧美精品久久| 性久久久久久久久久久| 亚洲高清不卡在线| 天堂成人在线观看| 97香蕉超级碰碰久久免费软件| xxxxxhd亚洲人hd| 日韩欧美不卡在线| www.成人在线| 日本天堂在线视频| 日韩精品视频中文在线观看| 免费成人在线电影| 欧美精品一区三区在线观看| 天堂成人国产精品一区| 白白色免费视频| 欧美三级电影网| 免费在线毛片网站| 亚洲自拍偷拍色图| 欧美特黄一区| 午夜av免费看| 色哟哟国产精品免费观看| 国产午夜在线观看| 国产免费亚洲高清| 1024精品久久久久久久久| 美女日批在线观看| 亚洲一区二区三区四区的| 在线观看xxx| 国产精品极品尤物在线观看| 国产精品不卡| 久久久久国产免费| 欧美日韩国产页| www视频在线观看免费| 91精品在线一区| 亚洲区第一页| 欧美三级视频网站| 在线播放91灌醉迷j高跟美女| 免费电影视频在线看| 美女主播视频一区| 精品一区二区三区日韩| 国产精品成人网站| 一区二区欧美久久| 亚洲视频精选| 成人小视频在线看| 亚洲日本电影在线| 国 产 黄 色 大 片| 国产91精品网站| 91成人国产| 欧美多人猛交狂配| 日韩欧美一区二区免费| 亚洲精品**中文毛片| 最新中文字幕久久| 99re这里只有精品首页| 怡春院在线视频| 久久免费视频观看| 91亚洲成人| 成人无码www在线看免费| 69p69国产精品| 色偷偷偷在线视频播放| 伊人久久大香线蕉成人综合网| 成人av网址在线| 国产精品久久久久久无人区| 78色国产精品| 欧美视频久久| 婷婷丁香综合网| 亚洲九九九在线观看| 视频一区日韩精品|