日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于Visual Basic 10.0

發布時間:2025/3/20 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于Visual Basic 10.0 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

隨著VS2010早期CTP的放出,大家對下一代開發系統的期待熱情又一次掀起了。除了已經開始被大家嘗鮮的C#4以外,Visual Basic也進化成了10.0。不過據我觀察,VB10的改變還沒有C#4那么明朗,我們目前的確可以看到一些語法上的變化,然而似乎VB10并未真正接近完工的地步,還有很多特性有待繼續開發。大家也許還記得VB9引入的令人眼前一亮的XML集成語法,使得VB擁有了業界最為緊密的XML集成。但VB需要編譯才能使用,這一點阻礙了VB強大的XML處理能力和動態能力,如果VB變成一個完全動態的編程語言,包括腳本化運行的能力,那么VB使用方便的特點將再一次發揮出來。但是VS2010 CTP中尚未看到基于新DLRVB編譯器。我們能看到的仍然是一個靜態編譯的VB10。所以我這次主要介紹一下VB語法方面的改進,更多改進等到VS2010來臨之際自然會知曉。

1.?????? 隱式續行符

用過VB的人都知道VB的語句是寫成一行一行的,無需分號隔離。一般情況下語句只能寫成一行,不能換行。而從VB5.0開始,如果覺得語句寫成一行太長,可以加入續行符(line continuation)來換行。比如說:

<HideModuleName()> _

Module Module1

?

??? <STAThread()> _

??? Sub Main()

??????? Dim message = "Your directory is" & _

?? ?????????Environment.CurrentDirectory()

?

??????? Dim l As New List(Of Integer)

??????? Dim r = From item In l _

??????????????? Where item > 0 AndAlso item < 100 _

??????????????? Select Number = item.ToString()

??? End Sub

?

??? Function Foo(ByVal x As Integer, _

???????????????? ByVal y As String, _

???????????????? ByVal z As Double) As Single

??? End Function

End Module

我們可以看到這段代碼中多處出現了續行符(就是一個空格加一個下劃線)。無論是Attribute應用語法,還是表達式、Linq表達式或函數簽名,都必須用續行符來換行。

首先我們說換行并非必須,而僅僅是為了美觀。像Linq這樣的語法出現之后,換行書寫就成了很多人的迫切需要。因此VB10改進了語法,引入了隱式換行符的概念。當VB能夠判斷一行語法未完的上下文,就會自動將緊接的一行視為續行,而無需顯示加入續行符。這樣一來在常見的場合,你就可以任意換行,充分發揚Basic語言的自由風格了:

<HideModuleName()>

Module Module1

?

??? <STAThread()>

??? Sub Main()

??????? Dim message = "Your directory is" &

?? ?????????Environment.CurrentDirectory()

?

??????? Dim l As New List(Of Integer)

??????? Dim r = From item In l

??????????????? Where item > 0 AndAlso item < 100

??????????????? Select Number = item.ToString()

??? End Sub

?

??? Function Foo(ByVal x As Integer,

???????????????? ByVal y As String,

???????????????? ByVal z As Double) As Single

??? End Function

End Module

這樣一來清爽多了。不過隱式續行符和顯式續行符一樣,有個小小的缺陷,就是不能在后面插入注釋。據說這是VB IDE團隊過分依賴于此特性,以至于超多歷史代碼無法一一改變造成的……

2.?????? 多行Lambda表達式和方法型Lambda表達式

VB2008為了支持Linq已經引入了Lambda表達式的概念。但VB2008Lambda表達式有局限性,只能是函數形態(必須有返回值),同時最多只能含有一個表達式,所以無法加入多行語句。雖然函數式編程僅支持一行語句也可編寫,但若能支持多行語句就能擴大與VB傳統語法的結合能力。比如說可以用在PLinq等場合。語法非常簡單,就如同是將SubFunction寫在了方法體內部一樣:

Dim f = Function(x) x + 1 '函數形態Lambda

Dim g = Sub(x) Console.WriteLine(x) '方法形態Lambda

Dim h = Function(x, y) '多行語句函數

??????????? Dim z = x`+ y

??????????? Return 2 * Math.Squr(Z)

??????? End Function

?

Dim i = Sub() '多行語句子程序

??????????? f(1)

??????????? g(2)

??????????? h(3, 4)

??????? End Sub

多行Lambda和語句型Lambda都可以捕獲局部變量,完成函數式的諸多算法。他們同樣也基于匿名委托工作。有了此工具,就可以更有效地在VB中進行函數式風格的編程了。

3.?????? 數組、集合和字典的初始化語句。

這個新特性是VB9日程過于緊迫而被砍掉的特性,其實和C#的類似功能是一樣的。首先,VB10引入了一個純粹的數組字面量。無需任何修飾,下列語法就表示一個強類型數組:

{1, 2, 3, 4}

編譯器會自動推測它是Integer類型的數組。這個表達式不僅僅可以用于賦值,還可以直接出現在需要數組的上下文中。這是個很好的特性,基于一些Linq操作,VB也可以像函數式語言操作“表”一樣,在數組上進行一些眼花繚亂的算法了。同時,List(Of T)Dictionary(Of TKey, TValue)類型也可以用類似的表達式初始化。暫定關鍵字為From

Dim l As New List(Of Integer) From {1, 2, 3, 4}

Dim d As New Dictionary(Of String, Double) From {{"A", 1}, {"B", 2}}

其實我個人感覺字典的初始化語法應該像JSON語法那樣才好。。。

4.?????? 泛型接口和泛型委托的協變、反變性

我們都知道.NET泛型是不允許任何形式的協變或反變的。也就是說Foo(Of T)是不可能轉成Foo(Of U)的,不管TU之間有什么樣的關系。用過Java泛型的人可能會對此表示疑問。但其實仔細一想不難發現,泛型參數T在這個類型中如何被使用我們是不能加以約束的。因此T既可能出現在成員函數的參數上,也可能出現在返回值上。因此允許協變必然會導致某種類型不安全的現象發生?,F在CLR增加了一種新的描述泛型類型參數的方法,可以限定類型參數只能用于方法的參數或返回值。這樣就使得安全的協變成為可能。VB10為此提供了兩種語法(僅能用于聲明泛型接口和泛型委托,不能用于泛型類或泛型方法):

Interface IFoo(Of In T)

??? Sub Foo(ByVal x As T)

End Interface

?

Interface IBar(Of Out T)

??? Function Bar() As T

End Interface

其中被In修飾的泛型類型參數僅能在接口或委托中用于函數的參數類型,而被Out修飾的泛型類型參數則只能用于返回值類型。

加上這樣的修飾之后,該接口就允許某些條件下的協變或反變了。首先,IFoo(Of In T)將可以反變IFoo(Of In U),當且僅當U繼承自T。比方說IComparable(Of Object)將能夠反變成IComparable(Of String)。因為IComparable(Of In T)擁有In的修飾。接下來IBar(Of Out T)也將可以協變IBar(Of Out U),當且僅當T繼承自U。比如IEnumerable(Of String)將能夠協變成IEnumerable(Of Object)。注意達成協變和反變的條件僅僅是繼承關系,而且必須都是引用類型。值類型泛型和引用類型泛型因為有不同的JIT已構建類型(Constructed Type),所以是不能運行時協變的。

綜上所述,VB10目前放出來的主要改進就是一些語法方面的完善工作。VB從很久以前就已經為動態大潮做好了準備,C#4的大部分新特性(例如dynamic,可選參數,命名參數)全部都是10年前VB就已經擁有的?,F在VB將傳統的動態能力與新的DLR結合在一起,加上XML語法的卓越威力,必將成為.NET 4時代重要的動態語言。后續新特性,待官方發布后將繼續研究和報道。

轉載于:https://www.cnblogs.com/Ninputer/archive/2008/11/03/vb10firstlook.html

總結

以上是生活随笔為你收集整理的关于Visual Basic 10.0的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。