とりこらぼ。

Learn from yesterday,
live for today,
hope for tomorrow.

目次

Blog 利用状況

ニュース

プロフィール

  • 名前:とりこびと
    とるに足らない人間です。

  • Wankuma MVP
    for '平々凡々'

Web Site

  • Memo(Of T)

もうひとつの Blog

広告っぽい

書庫

日記カテゴリ

Visual Studio 2008 の Visual Basic における Visual Studio 2005 からの変更点。その2。

セッションネタです。

前回→Visual Studio 2008 の Visual Basic における Visual Studio 2005 からの変更点。その1。


今回は2つ目の変更点を。

2.ジェネリック クラスと非ジェネリック クラスが存在する場合の オーバーロードの解決動作が異なる。

これは変更点というより、バグ修正だと思います。まずはこんなクラス↓があったとして

Namespace Demo2
    Public Class Class1
        Public Overloads Sub Method(Of T)(ByVal arg As T)
            System.Console.WriteLine("てふてふ~")
        End Sub
        Public Overloads Sub Method(Of T As Structure)(ByVal arg As Nullable(Of T))
            System.Console.WriteLine("さいさい~")
        End Sub
    End Class
End Namespace

もう一つはこれ↓。

Namespace Demo2
    Public Class Class2(Of U)
        Public Overloads Sub Method(Of T)(ByVal arg As T)
            System.Console.WriteLine("てふてふ~")
        End Sub
        Public Overloads Sub Method(Of T As Structure)(ByVal arg As Nullable(Of T))
            System.Console.WriteLine("さいさい~")
        End Sub
    End Class
End Namespace

この二つのクラスの違いはジェネリック パラメータ(Of U)があるかないかだけですね。

さてさて♪これらのクラスを使用して、以下のようなコードを記述します。

Namespace Demo2
    Module Program
        Sub Main()
            Dim c1 As New Class1             Dim c2 As New Class2(Of String)
            Dim n As New Nullable(Of Integer)
            c1.Method(n) ' ・・・ (1)             c2.Method(n) ' ・・・ (2)
        End Sub
    End Module
End Namespace

実はこのコードに対するコンパイラの動作が Visual Studio 2008 と Visual Studio 2005 で異なります。

このコードを見ると、 (1)、(2)のどちら(ジェネリック パラメータの有無だけの違いを持つClass1、Class2)においてもオーバーロードの解決ができない(どちらのMethod に対してもバインドしうる。)ですよね?

あいまいさを指摘するコンパイル エラー(これらの引数に最も固有な、アクセス可能な '<method>' がないため、オーバーロードの解決に失敗しました)が生成されるはずです。


が!


Visual Studio 2005 では、ジェネリック パラメータ を持つClass2についての呼び出し (2) ではコンパイルエラーが発生せず、制限のないオーバーロードにバインドされました。


それが!


Visual Studio 2008 では(1)、(2)のどちらに対してもコンパイルエラーが生成されるようになっています♪

投稿日時 : 2008年5月14日 0:44

Feedback

# Visual Studio 2008 の Visual Basic における Visual Studio 2005 からの変更点。その3。 2008/05/17 14:03 とりこらぼ。

Visual Studio 2008 の Visual Basic における Visual Studio 2005 からの変更点。その3。

# それって、C#ではどうなんですか?(その1~その3) 2008/05/20 1:32 とりこらぼ。

それって、C#ではどうなんですか?(その1~その3)

タイトル
名前
Url
コメント