• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    Visual Studio 2010 中 Visual Basic 10 概述

    發布: 2010-4-06 17:13 | 作者: 周融 | 來源: 領測軟件測試網采編 | 查看: 174次 | 進入軟件測試論壇討論

    領測軟件測試網

      

      概述

      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 Fibonacci 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.kjueaiud.com/

    TAG: basic Basic studio Studio visual Visual 概述


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>