VBで型を省略したときの振る舞い

Visual Basic Advent Calendar 2011 : ATND
.NET Framework 3.5から暗黙の型定義ができるようになりました。
って、VBは昔から出来ていたんですけどね。
そこで、C#にあわせて仕様が変更になりました。
以下のコードをご覧下さい。

module a
public sub main
dim a = 10
dim b
b = 10
b = "abc"
console.writeline(b)
a="abc"
console.writeline(a) ' ハンドルされていない例外: System.InvalidCastException: String "abc" から型 'Integer' への変換は無効です。
end sub
end module

aは変数宣言時に初期化しているため、暗黙的にInteger型で定義されます。
一方bは、初期化していないため、Object型として定義されます。
そのため、文字列"abc"を代入しようとすると、bのほうはすんなり入りますが、aの方はExceptionが発生してしまいます。

これまで、暗黙の型変換に頼ってルーズな書き方をしていた場合には、注意が必要になります。