Visual Studio 2010 中 Visual Basic 10 概述

發表于:2010-04-06來源:作者:點擊數: 標簽:BasicStudioVisualvisualstudio
概述 Microsoft 今年 10 月宣布正式命名下一代 開發 平臺和工具為 Microsoft .NET Framework 4.0 以及 Visual Studio 2010。Visual Studio 2010 先前代號 dev10,包含 Microsoft 最新的開發平臺創新和擴展。本文通過 2008 年 10 月 27 號發布的 Visual Studi

  

  概述

  Microsoft 今年 10 月宣布正式命名下一代開發平臺和工具為 Microsoft .NET Framework 4.0 以及 Visual Studio 2010。Visual Studio 2010 先前代號 dev10,包含 Microsoft 最新的開發平臺創新和擴展。本文通過 2008 年 10 月 27 號發布的 Visual Studio 2010 CTP 版本向大家完整介紹了 Visual Basic 10(代號 VBX)在該平臺上的新增功能。

  在本文中的內容

  · 數組初始值設定項

  · 集合初始值設定項

  · 內聯 Lambda 表達式

  · 自動實現屬性

  · 泛化

  · No-PIA 部署

  · 與 Python 的集成

  · 并行計算擴展

  數組初始值設定項(Array Literals)

  Visual Basic 9.0 在對一個數組類型的變量進行初始化賦值時,可以通過隱式類型本地變量(Type Inference)由編譯器推斷該數組是什么類型。例如:

  Dim strings = New String() { “A”, “B”, “C” }

  Dim integers() = { 1, 2, 3, 4, 5 }

  Visual Basic 10 增強了這一功能,在現在的版本中,我們不僅可以利用 Dim 語句聲明隱式類型變量,而且可以在接受參數的函數調用中使用。例如,在一個接受 String 數組類型的 SearchPath 函數調用,就可以使用如下形式。

  Dim results() = SearchPath( { “C:\”, “D:\”, “E:\” })

  集合初始值設定項(Collection Initializer)

  集合初始值設定項在 C# 3.0 中已經被引入,例如,我們現在需要對一個 List 的對象增加三個 string,我們需要這樣調用。

  Dim list = New List(Of String)

  list.Add(“string1”)

  list.Add(“string2”)

  list.Add(“string3”)

  但在 Visual Basic 10 中,也可以和 C# 一樣直接初始化了。例如上面的代碼可以簡寫為如下代碼。

  Dim list = New List(Of String) From { “string1”, “string2”, “string3” }

  這里的 From 關鍵字表明了該初始值從后面的集合中獲得,這樣的語法等同于前面所描述的利用 List.Add() 方法添加數據,不同的是 CLR 為我們完成了三次 Add() 方法的調用。

  結合上面提到的兩項創新,我們可以大大簡化初始化變量的語法。例如。

  Dim students = List(Of Student) From { _

  New Student With { .Name := “Mark”, .Age := 24, .PhoneNumbers := { “123-XXX-XXXX”, “XXX-XXX-XXXX” } },

  New Student With { .Name := “Evan”, .Age := 22, .PhoneNumbers := { } }

  }

  Public Class Student

  Public Name As String

  Public Age As Integer

  Public PhoneNumbers As List(Of String)

  End Class

  內聯 Lambda 表達式(Inline Lambda Expressions)

  Visual Basic 9 引入了 Lambda 表達式,但由于 Visual Basic 的行結束符為回車,導致如果我們需要在 Lambda 函數體中執行多項操作時會很麻煩,C# 可以用括號將語句括起來形成語句塊來解決這個問題,但 Visual Basic 就只能利用冒號將多個語句分開。

  Visual Basic 10 提供了新的內聯 Lambda 表達式支持,使得這一類問題可以順利解決。如下面代碼所示。

  Dim t = New Thread(Sub()

  myWorkingThread.Sleep(200)

  myBackgroundThread.Suspend()

  End Sub)

  或者這樣。

  Dim f As New Func(Of Integer, Integer)

  f = Function(x As Integer) As Integer

  If x < 2 Then

  Return 1

  Else

  Return f(x – 1) + f(x - 2)

  End Function

  Console.WriteLine(“10th element of Fibonaclearcase/" target="_blank" >cci is: {0}”, f(10))

  自動實現屬性(Auto Implemented Properties)

  自動實現屬性和 C# 中的相同概念是完全一致的。某些情況下,我們對屬性的用途都是對私有字段的封裝,那么在這種情況下,Get 和 Set 函數就可以省略。這種場景京城應用在 XML 序列化和數據集的 OR 模型中。

  下面的代碼演示了 Visual Basic 10 中的自動實現屬性的用法。

  Public Class Student

  Public Property Name As String = String.Empty

  Public Property Age As Integer = -1

  Public Property PhoneNumbers As List(Of String) = New List(Of String)

  End Class

  泛化(Variance)

  泛化的概念涉及到在泛型類型參數中的運行時轉化。我們舉一個例子,如果我們需要實現一個 RSS 源的訂閱系統,我們的設計中可能包含一個 RssFeed(Of RssFeedItem) 的類,由于各個提供商的 RssItem 定義不同,則會導致有很多 RssItem 的繼承類,如應用在 Windows Live Spaces 中的 WindowsLiveRssFeedItem 就繼承自 RssItem 類,從而會產生 WindowsLiveRssFeed 的 RSS 源定義類。如果我們需要批量處理這些訂閱的 RSS 源(也就是 RSSFeed 的繼承類),則我們在編寫漢書實現時,應使用基類型作為入口參數的類型。如。

  Sub ProcessFeeds(ByVal feeds As RssFeed(Of RssFeedItem))

  …

  End Sub

  如果我們這樣傳遞一個參數給上述函數,編譯器會怎樣呢?

  Dim rss = New RssFeed(Of WindowsLiveRssFeedItem)

  ProcessFeeds(rss)

  大家可能認為完全可以編譯通過,沒問題。但奇怪的事情發生了,編譯器報告:無法將類型從 RssFeed(Of WindowsLiveRssFeedItem) 轉換為 RssFeed(Of RssFeedItem)。

  這是很顯然的,泛型類型是強類型,泛型參數不同的兩個泛型類的類型是不一樣的,這時。我們必須在設計時利用 Cast 語句在運行時期間動態轉換WindowsLiveRssFeedItem 為 RssFeedItem,這回引起性能問題和不必要的開銷。

  Visual Basic 10 通過將該泛型參數泛化來解決這個問題。在聲明泛型類型時,通過在泛型參數前增加 Out 修飾就可以了。例如。

  Class RssFeed(Of Out RssFeedItem)

  …

  End Class

  則以上的代碼就能正常工作。C# 4.0 同樣增加了這個語法。我們還了解到,IEnumerable 在默認情況下已經將泛型參數 T 修飾成了 Out。

  這個功能如何工作的?Visual Basic Team 的一個 Dev 并沒有透露,我們期待更加合理的解釋。

  No-PIA 部署(No PIA Deployment)

  我們在編寫基于 Microsoft Office 的應用程序時,往往需要部署一堆 VSTO 的 Runtime 程序集,但有時候我們編寫一些應用程序時,僅僅調用了這些 Interop 程序集中很少的功能。例如僅僅保存或打開了一個 Excel 表格等,如果每次部署這樣的應用程序都需要分發整個 PIA(Primary Interop Assemblies)的話就顯得多此一舉。在新的 Visual Basic 中,可以將一個 PIA 程序集的屬性設置為 Embedded 來講其用到的對象引用內嵌到您自己的程序集中,這樣就避免了分發整個 VSTO Runtime 的臃腫部署方式。

  與 Python 的集成

  Visual Basic 10 提供了一個 Python 的適配器,可以動態的啟動一個 Python 運行時,并通過對象來與 Python 運行時通訊完成共同協作。例如,您可以動態的啟動一個 Python 解釋器,并在該實例下聲明一個 Python 的 string 類型變量,然后通過 .NET Framework 的 Console.Write() 方法將其輸出。

  Python 集成功能在目前的 CTP 版本并不可用。預計在 Visual Studio 2010 Beta 1 才真正提供這些特性支持。

  并行計算擴展(Parallel Computing Extensions)

  并行計算組已經準備好講其并行計算擴展引入到 .NET Framework 4.0。并行計算針對多核處理器的計算機系統進行特別優化,從而充分利用 CPU 時間片并大大提供工作效率。目前,并行計算的 CTP 版本已經在 Microsoft 下載中心提供,大家有興趣可以下載后試用。

  并行計算擴展擴展了一個擴展方法 AsParallel(),增加類 Parallel 和 Future,并提供了一個任務管理器,專門用來對任務進行分配、管理和執行。并行計算擴展還提供了 PLINQ 語法,用來方便的將現有代碼并行化。

  下面代碼一段適用 PLINQ 的代碼。

  Dim threads = GetWorkingThreads()

  Parallel.ForAll(Sub(i)

  Console.WriteLine(i.ThreadID)

  End Sub)

  Dim integers = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }

  Dim odds = From p In integers.AsParallel() _

  Where p Mod 2 = 1 _

  Select p

  For Each item In odds

  Console.WriteLine(item)

  Next

  結論

  Visual Basic 10 針對 DLR 作了更多的創新和優化,并在 COM 互操作性方面進行了改進。Visual Basic 10 在很多語言特性上已經和 C# 同步,這使得 Visual Basic 更加具備實力成為世界上一流的開發語言工具。

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97