型パラメータ '<typeparametername1>' は、型パラメータ '<typeparametername2>' の 'New' 制約を満たすために 'New' 制約または 'Structure' 制約が必要です。

更新 : 2007 年 11 月

New 制約を満たさない型パラメータを渡すジェネリック型が、ステートメントで作成されています。

New 制約は、型パラメータに渡される型引数が、オブジェクトを作成するコードからアクセスできるパラメータなしのコンストラクタを公開する必要があることを意味します。値型には常にパラメータなしのコンストラクタがありますが、参照型にはパラメータなしのコンストラクタがあるとは限りません。したがって、Structure 制約は、New 制約を満たしますが、Class 制約、つまりクラス名またはインターフェイス名は New 制約を満たしません。

このエラーは次のようなコードで発生します。

Public Class c1(Of t As New)
End Class
Public Class c2(Of u)
    Public testObject As New c1(Of u)
End Class

クラス c2 がオブジェクトを c1 から作成するときに、型パラメータ u は型パラメータ t の New 制約を満たしません。

Error ID: BC32084

このエラーを解決するには

  • ジェネリック型に渡す型パラメータが Structure 制約または New 制約を満たす場合に、適切な制約が定義に追加されます。

    Public Class c2(Of u As Structure)
    
  • 型パラメータが Structure 制約または New 制約を満たすことができない場合、型パラメータはジェネリック型に渡されません。他のものを型引数として渡す必要があります。

参照

概念

Visual Basic におけるジェネリック型

値型と参照型

参照

New (Visual Basic)

Structure (Visual Basic)

Class (Visual Basic)