C#4のように、VB 10には画期的な機能はあまり搭載されない見込みである。これまでのところ、すべてのものがすでに利用可能となったが、便利な形態ではない。
もっとも期待されている機能はおそらく、行継続文字の除去であろう。あいまいなケースがいくつかあるが、ほとんどの場合、下線は不要である。
次は、配列の黙示的な初期化である。VB 9に追加された配列の初期化;残念ながら、いく分構文が冗長である。型の推論でさえ、冗長型情報は必要である。
Dim vectorA As Integer() = New Integer() {1, 2, 3, 4, 5} Dim vectorB = New Integer() {1, 2, 3, 4, 5}
Visual Basic 10は、初期化配列のために型の推論を追加する。
Dim vectorC = {1, 2, 3, 4, 5}
各引数に共通の最も明確な型を決定することで、この構文は機能する。それがSystem.Objectである場合、コンパイラによる警告が出される。ベクトルの他に、マトリックスや配列の配列がサポートされる。
Dim matrix = {{1, 2, 3}, {4, 5, 6}} Dim jagged = { ({1,2,3}), ({4,5}), ({6})}
この機能に適合するのは、コレクションの初期化である。Fromキーワードを使って、初期化リストの各項目が新たに作成されたオブジェクトに追加される。
Dim list As New List(Of Integer) From {1,2,3,4} Dim dictionary As New Dictionary(Of String, Integer) From {{ "Tom",80},{ "Frank",85}}
コレクションに、正しいパラメータのあるAddというメソッドがある限りは、初期化は、任意の引数で実行可能である。そうしたメソッドが存在しない場合、拡張メソッドして追加可能である。
Dim customers As New List(Of Customer) From { {"Tom", "T", "Jones"}, {"Frank", "M", "Burns"}}
単一行および複数行ラムダは、機能およびサブルーチンに関して、VB 10でサポートされる。複数行デリゲートの構文を以下に示す。
listA.ForEach(Sub(id) Dim c = GetCustomer(id) If c.UnpaidBill > 0 Then c.Send(Invoice) End Sub)
既存の構文を使用して、自動プロパティが追加された。公開メンバー変数の構文のようであるので、後者の使用を阻止している。任意の初期化指定子を以下に示す。
Public Property Score As Integer = 5
C#は、オプションパラメータに対しサポートを追加している唯一の言語ではない。VBは何もかもがある一方で、サポートされたユースケースがあった。具体 的には、Nullable(Of T)として定義されたすべての型は、オプションとしては許可されていなかった。これはVB 10で修正され、最終的にストアードプロシージャコールが、VBラッパー機能と相関的にマップ可能である。
最後に、Co-およびContra-Varianceに対するサポートである。これについては、C# Feature Focus: Co- and Contra-variance の記事(参考記事・英語)で取り上げた。