セッションネタです。
前回→Visual Studio 2008 の Visual Basic における Visual Studio 2005 からの変更点。その2。
今回は3つ目の変更点を。
3.T から T? への拡張が定義済みの変換として扱われる。
さて、Visual Studio 2008 では、T から T? への拡張を既定でサポートするようになりました。この動作によって、今までのコードがあいまいとみなされることがあります。例えば以下のようなクラスがあったとして~
Namespace Demo3
Public Class Class1
Public Overloads Sub Method(ByVal arg As Integer)
System.Console.WriteLine("さくさく~")
End Sub
Public Overloads Sub Method(ByVal arg As Nullable(Of Short))
System.Console.WriteLine("MewMew~")
End Sub
End Class
End Namespace
オーバーロードされた Method という名前のメソッドがあり、パラメータにはそれぞれ Integer と、 Nullable(Of Short) をとります。
このクラスを以下のようにパラメータにShort型を指定して呼び出す場合、あいまいさを指摘するコンパイル エラーが生成されるです。
Namespace Demo3
Module Program
Sub Main()
Dim c1 As New Class1
Dim s As Short
c1.Method(s)
End Sub
End Module
End Namespace
つまり、オーバーロードの解決時に T? へのバインドが考慮されるようになったのですね♪で、上記コードはどっちの Method にバインドしていいかわからないからエラー出しちゃいますよって感じです。