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