Visual Studio 2010中的語言增強一覽
Visual Studio 2010的Beta版發(fā)布已經(jīng)過了數(shù)月有余,無論是C#,VB.NET還是F#的表現(xiàn)都令人期待(有關(guān)Visual Studio 2010 Beta版中的新特性總覽,可參考51CTO之前發(fā)布的這篇文章)。選擇一種開發(fā)語言是程序員的個人選擇,就像挑選一種冰激凌口味——有許多不錯的選擇,但你最喜歡的口味則是一個個人偏好的問題。
在Visual Studio 2010中,我們對兩種最流行的語言:Visual Basic和C#做了一些加強,提供給程序員——無論他們偏好哪種語言——所有的工具,幫助他們?nèi)ネ瓿梢粋€完美的軟件。
Visual Studio 2010中的Visual Basic
Visual Basic團隊致力于增強語言的效率,從而讓開發(fā)者在更少的代碼行中獲得更多的功能。關(guān)于Visual Basic,最常見的用戶需求是當(dāng)將代碼語句拆分為多行時,去除下劃線(“_”)。Visual Basic 10 引入了隱式的行延續(xù)方式,使得在大多數(shù)情況下,不需要使用下劃線。
- Function Filter(
 - ByVal customers As List(Of Customer),
 - ByVal orderCount As Integer
 - )
 - Dimquery =
 - FromcIncustomers
 - Where c.Orders.Count >
 - orderCount
 - Selectc
 
另一個提高效率的功能是自動實現(xiàn)(auto-implemented)屬性。應(yīng)用自動實現(xiàn)屬性,原有的屬性模板代碼會被一行簡單的聲明代碼替代。以前,屬性聲明一般是這樣:
- Private _FavoriteFlavor As String = "Butter Pecan"
 - Property FavoriteFlavor() As String
 - Get
 - Return _FavoriteFlavor
 - End Get
 - Set(ByVal value As String)
 - _FavoriteFlavor = value
 - End Set
 - End Property
 - Private _FlavorList As New List(Of Flavor)
 - Property FlavorList() As List(Of Flavor)
 - Get
 - Return _FlavorList
 - End Get
 - Set(ByVal value As String)
 - _FlavorList = value
 - End Set
 - End Property
 
現(xiàn)在屬性聲明要簡單的多:
- Property FavoriteFlavor As String = "Butter Pecan"
 - Property FlavorList As New List(Of Flavor)
 
集合初始化以及數(shù)組標(biāo)值同樣很簡單?,F(xiàn)在集合可以在聲明時初始化,并由編譯器判斷數(shù)組標(biāo)值類型。
- Dim toppings = New List(Of String) From
 - {
 - "sprinkles",
 - "chocolate chips",
 - "strawberries"
 - }
 - Dim cones = {"sugar cone", "waffle cone"} 'the type String() is inferred
 
Visual Basic 10.0對Lambda表達式有更好的支持。Lambda表達式可以包含不返回值的表達式,比如下文中的Sub關(guān)鍵字:
- Array.ForEach(toppings, Sub(n) Console.WriteLine(n))
 
有時你需要在Lambda表達式中做更復(fù)雜的工作,Visual Basic 10.0支持多行的Lambda表達式。和一般的表達式一樣,編譯器會推斷出參數(shù)和返回值的類型:
- Dim doubleDown = Function(n As String)
 - If n.StartsWith("s") Then
 - Return "extra " & n
 - Else
 - Return n
 - End If
 - End Function
 
在Visual Basic 10.0中,與Python或者Ruby這些動態(tài)語言的互操作也變得很簡單。例如,下面的代碼片段調(diào)用了Python庫“math.py”中的一個方法:
- Dim mathLib As Object = python.UseFile("math.py")
 - Dim firstNumber = 44.2
 - Dim secondNumber = 9.5
 - mathLib.PowerOf(firstNumber, secondNumber)
 
Visual Studio 2010中的C#
C#4.0主要的改進在于動態(tài)編程范式的共用性以及Office的可編程性改進。動態(tài)查詢是C#4.0的新功能(有關(guān)C# 4.0動態(tài)類型的使用,可參考51CTO之前發(fā)布的這篇文章),這個功能使你可以以同樣的方式使用并操作IronPython、IronRuby、JScript、HTML DOM或者標(biāo)準(zhǔn).NET庫中的對象。指定和可選的參數(shù)、COM客戶端支持等語言方面的增強,則使得面向Office API的C#開發(fā)者能夠享受Visual Basic開發(fā)者同樣的美好體驗。
在你的代碼中添加dynamic這一新的關(guān)鍵詞,能夠使對象類型在運行時動態(tài)獲得而不是在編譯時制定。這樣能夠使動態(tài)語言以一種更自然的方式向C#暴露它們的對象。
對于Visual Basic和C++的程序員來說,可選參數(shù)是很熟悉的,現(xiàn)在,C#程序員也可以使用這一特性。帶有默認值的可選參數(shù)在方法簽名中聲明,如下所示:
- dynamic dynamicObject = GetDynamicObjectFromRuby();
 - dynamicObject.Foo(7);
 - dynamicObject.Property = "Property value";
 - dynamicObject[0] = "Indexed value";
 
上述的方法可以用以下任意一種方式調(diào)用:
- private void CreateNewStudent(string name, int currentCredits = 0, int year = 1)
 
忽略currentCredits參數(shù),但指定year參數(shù),新的指定功能(高亮處)能夠?qū)崿F(xiàn)這一需求。下述調(diào)用同樣可行:
- CreateNewStudent("Chloe");
 - CreateNewStudent("Zoe", 16);
 - CreateNewStudent("Joey", 40, 2);
 
- CreateNewStudent("Jill", year: 2);
 - CreateNewStudent(name: "Bill", currentCredits: 30, year: 2);
 - CreateNewStudent("Will", currentCredits: 4);
 
指定參數(shù)同樣是對已有方法書寫自闡述調(diào)用的好方式,即使它們并沒有使用可選參數(shù)。
【編輯推薦】















 
 
 
 
 
 
 