Visual Basic 11新特性一覽

2022-02-12 02:59:25 字數 1735 閱讀 7497

visual basic 11推出了一些新特性,其中包括非同步函式和期待已有的迭代器。

visual basic中的非同步支援與c#中的版本一樣。兩者均使用相同的設計和關鍵字(即async和await),並且背後支撐這些關鍵字的都是.net 4.0引入的任務並行庫(task parallel library)。

儘管非同步函式從理論上來說可以在任意地方使用,但是其主要目的還是為了防止敏感執行緒(sensitive thread)發生阻塞,例如,你可以在wpf或silverlight應用程式的ui執行緒中使用非同步函式進行檔案操作、服務呼叫或資料庫請求。非同步操作 完成後會自動回歸ui執行緒,而不會在此期間造成阻塞。

asp.net執行緒池中的執行緒是另乙個敏感執行緒的例子。一般情況下,asp.net會限制併發執行緒的數量,以防止過多的上下文切換導致效能退化。這 個數量通常會設定成乙個任意的基數,而後當執行時(runtime)檢測到大量阻塞時再進行增長。若改用非同步、非阻塞呼叫,系統執行將更接近於理想的 「one thread-per-core」模型。

visual basic 11同時支援迭代器函式(iterator function)和迭代器塊(iterator block)。其中迭代器函式類似於c#中的迭代器,只是語法稍有改動。在vb中,迭代器函式必須被宣告為「iterator function」而不僅是「function」關鍵字。vb開發人員使用「yield [expression]」來返回結果值,這與c#中使用「yield return [expression]」不一樣。

vb & c#語言組程式經理anthony green 談到:

iterator關鍵字雖然使我們避免了對那些使用yield作為識別符號(如金融相關的應用程式)的現存原始檔造成破壞,雖然為我們提供了乙個簡潔 的yield關鍵字而非關鍵字對yield return,但這些並不是它出現的唯一原因。一般情況下,vb都會有一種宣告風格(如xml literal、handle和implement)。我們認為,vb中的**應當可以「顧名思義」,即如果乙個函式是迭代器函式,那麼**就應當寫明這 點。當然,如果人們就把他們當做iterator和async函式呼叫,其實也能夠執行。你可以從vb其他修飾符,如readonly和 writeonly屬性中看到這種模式——如果屬性沒有setter部分,那麼從語義上就意味著它是readonly,從而在宣告時就可以為屬性加上 readonly修飾符。

顯式宣告修飾符的另乙個好處在於,我們可以提供乙個更好的編輯器體驗。在vb中,當你鍵入「iterator function f as integer」時,ide會自動為你插入「ienumerable(of integer)」。類似地,如果你鍵入「async function f as integer」,ide會為你將「as integer」替換成「as task(of integer)」。這就像為屬性新增readonly修飾符一樣,我們可以借助這些資訊自動生成更優質的**。

有趣的是,vb11還支援一種lambda表示式——迭代器塊。下面的例子使用lambda表示式建立「ienumerable(of integer)」物件並對其進行遍歷。迭代器塊還可以通過在「end function」行結束後附加「.invoke()」用在xml literal中。

同c#一樣,visual basic 11也支援callermembername、callerlinenumber和callerfilepath 特性。在應用這些特性之後,編譯器會自動計算出行號、檔案路徑等值,並將它們作為可選引數進行傳遞。這些特性用得最多的兩處地方是日誌記錄和屬性變更通知 事件。

vb11中的其他改進包括:

Visual Basic 11新特性一覽

visual basic 11推出了一些新特性,其中包括非同步函式和期待已有的迭代器。u0026 xd n visual basic中的非同步支援與c 中的版本一樣。兩者均使用相同的設計和關鍵字 即async和await 並且背後支撐這些關鍵字的都是.net 4.0引入的任務並行庫 task par...

Zend Framework V1 5 中的新特性

流行的開源軟體 zend framework 剛剛實現了一些出色的增強。本文介紹 v1.5 中的新特性以及如何公升級對 gdata web 服務的增強支援,包括zend form zend layout和zend view,並且,改進的 ajax 支援可以幫助 php 開發人員輕鬆地構建先進的 we...

Chapter11 迪公尺特法則

迪公尺特法則 lod 如果兩個類不必彼此直接通訊,那麼這兩個類就不應當發生直接的相互作用。如果其中乙個類需要呼叫另乙個類的某乙個方法的話,可以通過第三者 這個呼叫。迪公尺特法則,強調的前提是在類的結構設計上,每乙個類都應當盡量降低成員的訪問許可權。也就是說,每個類包裝好自己的private狀態,不需...