人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當前位置:蘿卜系統下載站 > 技術開發教程 > 詳細頁面

C# 3.0語言詳細說明之基本的語言增強

C# 3.0語言詳細說明之基本的語言增強

更新時間:2022-09-07 文章作者:未知 信息來源:網絡 閱讀次數:

Linq項目簡介和開發環境的搭建  

  9月份,微軟推出了一項名為“Linq項目”的新技術,用于在.NET語言中集成數據查詢的功能。您可以從http://msdn.microsoft.com/netframework/future/得到Linq項目的技術預覽版,其中包括大量的介紹文章(英文)和C# 3.0以及VB 9.0的編譯器。  

  Linq項目英文全稱為Language Integrated Query,即“語言集成查詢”。Linq基于.NET Framework 2.0,通過對語言的改進,實現在直接在語言中通過類似SQL語句的構造對數據源進行查詢,可查詢的數據源從基本的順序結構(如數組和鏈表)延伸到關系型數據庫(目前是SQL Server,相信將來可以擴展到幾乎所有的關系型數據庫)和XML。  

  C# 3.0是C#語言再一次升級后的版本,率先實現了Linq的概念;同樣實現了Linq的還有VB 9.0。從上面提到的網址,讀者可以找到兩種語言的編譯器的技術預覽版。在本文中我們將以C# 3.0為中心討論其開發環境的搭建和語言改進。下載得到的是一個名為“linq preview.msi”(也可能不同)的安裝包,雙擊之后可以和其他軟件一樣進行安裝,此處不再贅述。該安裝包為Visual Studio 2005 Beta 2及以后的版本和Visual C# 2005 Beta 2提供了插件(項目模板)和C#編譯器,該編譯器生成的IL代碼可以直接在.NET Framework 2.0上運行。在安裝了該預覽版后,在新建項目對話框中項目類型列表的Visual C#節點下,我們可以看到一個Linq Preview的條目,并可以在右邊的項目模板中選擇一些桌面項目模板(Linq暫時還不支持Web項目)。  
只要選中了Linq中的項目模板,我們就可以像編寫其他應用程序一樣在Visual Studio 2005中開始編寫C# 3.0應用程序了,在編譯的時候IDE會自動為我們選擇C# 3.0的編譯器。  

  現在我們已經可以開始編寫C# 3.0應用程序了,后面的章節中我就將為大家講解C# 3.0所帶來的語言增強。值得說明的一點是,本文是一個系列文章中的一篇,這一系列文章共三個部分。本文為第一部分,講述C# 3.0種基本的語言增強,這些語言增強其實是其他兩個部分的基礎;第二部分將講述C# 3.0中的Lambda表達式,這是匿名方法的自然進化形式,它不僅能將表達式體現為可執行的方法(委托),也能將表達式體現為可以在運行時進行操作的數據結構——表達式樹;最后一部分講述的才是Linq項目中最核心的也是最激動人心的內容——查詢表達式,這是Linq在C#中的實現形式。同時,Linq還針對SQL查詢和XML查詢對.NET Framework基礎類庫進行了擴充,分別稱作DLinq和XLinq,這些內容我將在其他系列文章中為大家講述。  

  在本文的講述過程中,限于篇幅,僅提供了簡短的代碼段而不是完整的代碼。不過這些代碼段是從完整的、可正確編譯和運行的代碼中抽取出來的,這些完整代碼可以從這里下載,并且在本文的第5部分中有關于完整代碼的介紹。  

具有隱式類型的聲明 

  在一個帶有初始化器的聲明語句中,待聲明的變量的類型是顯而易見的——和初始化表達式的結果類型一致。對于這種情況,在C# 3.0中可以使用新增的關鍵字var來代替聲明中的類型,而由編譯器根據初始化表達式來推斷出變量的類型。 

var i = 5; // int 
var d = 9.0; // double 
var s = "Hello"; // string 
var a = new int[] { 1, 2, 3, 4, 5 }; // int[] 

Console.WriteLine("Type of variable : {0}", i.GetType()); 
Console.WriteLine("Type of variable : {0}", d.GetType()); 
Console.WriteLine("Type of variable : {0}", s.GetType()); 
Console.WriteLine("Type of variable : {0}", a.GetType());  

  上面的代碼在C# 3.0中是符合語法規則的,前四行代碼就是使用了隱式類型的聲明;而后四行代碼用于在運行時驗證各個變量是否擁有正確的類型。如果在Visual Studio 2005中運行這段代碼(為了能夠看到結果,請使用Ctrl+F5來編譯并啟動程序),會得到下面的結果: 

Type of variable : System.Int32 
Type of variable : System.Double 
Type of variable : System.String 
Type of variable : System.Int32[]  

  這表明,編譯器在編譯的時候,已經正確地推斷了每個變量的類型,并將其嵌入到了程序集的元數據中。 

  這里有兩個限制,一是具有隱式類型的聲明只能作用在局部變量上,二是這種聲明必須有初始化器(即等號和后面的表達式)。如果我們企圖在一個類中聲明一個具有隱式類型的域,就會出現一個編譯錯誤:Invalid token ’var’ in class, struct, or interface member declaration;而如果聲明中沒有出現初始化器,則會導致另外一個編譯錯誤:’=’ expected。 

  除了局部變量外,作用域為一個塊的數組也可以運用具有隱式類型的聲明,例如: 

var ia = new [] { 1, 2, 3, 4, 5 }; // int[] 
var da = new [] { 1.1, 2, 3, 4, 5 }; // double[] 
var sa = new [] { "Hello", "World" }; // string[] 

Console.WriteLine("Type of array : {0}", ia.GetType()); 
Console.WriteLine("Type of array : {0}", da.GetType()); 
Console.WriteLine("Type of array : {0}", sa.GetType());  

  在上面例子的數組聲明中,在運算符new和表示數組聲明的一對方括號之間省略了類型名字,但這在C# 3.0中仍然是符合語法規則的。編譯器會通過成員列表中的值的類型來推斷數組的類型。編譯并運行上面的例子,會得到如下的輸出: 

Type of array : System.Int32[] 
Type of array : System.Double[] 
Type of array : System.String[]  

  除了和具有隱式類型的局部變量具有相同的約束外,具有隱式類型的數組還有必須尊從這樣一個規則,即成員列表中的所有值必須是兼容的。也就是說,成員列表中必須存在這樣一個值,使得其他值可以隱式地轉換為該值的類型。因此,下面的聲明是不符合語法規則的: 

var aa = new [] { 1, "Hello", 2.0, "World" };  

  如果試圖編譯上面的代碼,會得到一個編譯錯誤:No array type can be inferred from the initializers。這是因為編譯器無法根據成員列表中的值來推斷數組的類型。 

  實際上,盡管具有隱式類型的聲明使得傳統聲明的編寫方法更加便利,然而引入這種聲明方式的真正目的并不在于此,而是為了使局部變量和數組能夠訪問這樣一個新的語言構造:匿名類型。 

[1] [2]  下一頁

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

網站地圖xml | 網站地圖html
主站蜘蛛池模板: 旺苍县| 乌苏市| 西青区| 新宾| 台前县| 陇南市| 栾城县| 环江| 恭城| 庐江县| 射阳县| 天祝| 海丰县| 长兴县| 镇安县| 宁明县| 鞍山市| 托克逊县| 襄城县| 都江堰市| 沈丘县| 彩票| 灌南县| 深州市| 万年县| 英超| 根河市| 咸宁市| 彝良县| 汽车| 万盛区| 九龙县| 丽江市| 望江县| 呼和浩特市| 鹤山市| 文成县| 突泉县| 石棉县| 皋兰县| 杭州市|