Visual Studio 2010中的語(yǔ)言增強(qiáng)一覽
Visual Studio 2010的Beta版發(fā)布已經(jīng)過(guò)了數(shù)月有余,無(wú)論是C#,VB.NET還是F#的表現(xiàn)都令人期待(有關(guān)Visual Studio 2010 Beta版中的新特性總覽,可參考51CTO之前發(fā)布的這篇文章)。選擇一種開發(fā)語(yǔ)言是程序員的個(gè)人選擇,就像挑選一種冰激凌口味——有許多不錯(cuò)的選擇,但你最喜歡的口味則是一個(gè)個(gè)人偏好的問(wèn)題。
在Visual Studio 2010中,我們對(duì)兩種最流行的語(yǔ)言:Visual Basic和C#做了一些加強(qiáng),提供給程序員——無(wú)論他們偏好哪種語(yǔ)言——所有的工具,幫助他們?nèi)ネ瓿梢粋€(gè)完美的軟件。
Visual Studio 2010中的Visual Basic
Visual Basic團(tuán)隊(duì)致力于增強(qiáng)語(yǔ)言的效率,從而讓開發(fā)者在更少的代碼行中獲得更多的功能。關(guān)于Visual Basic,最常見(jiàn)的用戶需求是當(dāng)將代碼語(yǔ)句拆分為多行時(shí),去除下劃線(“_”)。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
另一個(gè)提高效率的功能是自動(dòng)實(shí)現(xiàn)(auto-implemented)屬性。應(yīng)用自動(dòng)實(shí)現(xiàn)屬性,原有的屬性模板代碼會(huì)被一行簡(jiǎ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)在屬性聲明要簡(jiǎn)單的多:
- Property FavoriteFlavor As String = "Butter Pecan"
- Property FlavorList As New List(Of Flavor)
集合初始化以及數(shù)組標(biāo)值同樣很簡(jiǎn)單?,F(xiàn)在集合可以在聲明時(shí)初始化,并由編譯器判斷數(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對(duì)Lambda表達(dá)式有更好的支持。Lambda表達(dá)式可以包含不返回值的表達(dá)式,比如下文中的Sub關(guān)鍵字:
- Array.ForEach(toppings, Sub(n) Console.WriteLine(n))
有時(shí)你需要在Lambda表達(dá)式中做更復(fù)雜的工作,Visual Basic 10.0支持多行的Lambda表達(dá)式。和一般的表達(dá)式一樣,編譯器會(huì)推斷出參數(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這些動(dòng)態(tài)語(yǔ)言的互操作也變得很簡(jiǎn)單。例如,下面的代碼片段調(diào)用了Python庫(kù)“math.py”中的一個(gè)方法:
- 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主要的改進(jìn)在于動(dòng)態(tài)編程范式的共用性以及Office的可編程性改進(jìn)。動(dòng)態(tài)查詢是C#4.0的新功能(有關(guān)C# 4.0動(dòng)態(tài)類型的使用,可參考51CTO之前發(fā)布的這篇文章),這個(gè)功能使你可以以同樣的方式使用并操作IronPython、IronRuby、JScript、HTML DOM或者標(biāo)準(zhǔn).NET庫(kù)中的對(duì)象。指定和可選的參數(shù)、COM客戶端支持等語(yǔ)言方面的增強(qiáng),則使得面向Office API的C#開發(fā)者能夠享受Visual Basic開發(fā)者同樣的美好體驗(yàn)。
在你的代碼中添加dynamic這一新的關(guān)鍵詞,能夠使對(duì)象類型在運(yùn)行時(shí)動(dòng)態(tài)獲得而不是在編譯時(shí)制定。這樣能夠使動(dòng)態(tài)語(yǔ)言以一種更自然的方式向C#暴露它們的對(duì)象。
對(duì)于Visual Basic和C++的程序員來(lái)說(shuō),可選參數(shù)是很熟悉的,現(xiàn)在,C#程序員也可以使用這一特性。帶有默認(rèn)值的可選參數(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ù)同樣是對(duì)已有方法書寫自闡述調(diào)用的好方式,即使它們并沒(méi)有使用可選參數(shù)。
【編輯推薦】