次の方法で共有


コンパイラ エラー CS0304

変数型 '<型>' のインスタンスは、new() 制約を含まないため、作成できません

ジェネリック クラスを実装し、new キーワードを使用して型パラメーター T に指定する任意の型の新しいインスタンスを作成する場合は、次の例に示すように、クラス宣言で new() 制約T に適用する必要があります。

class C<T> where T : new()  

この new() 制約によって、T に指定される任意の具象型にパラメーターなしのコンストラクターがあることが保証されることで、タイプ セーフが実現されます。 CS0304 は、型パラメーター Tnew() 制約を指定していないときに、クラスの本体で new 演算子を使用して T のインスタンスを作成しようとした場合に発生します。 クライアント側のコードで、パラメーターなしのコンストラクターを持たない型を使用してジェネリック クラスをインスタンス化しようとすると、コンパイル エラー CS0310 が生成されます。

次の例では CS0304 が生成されます。

// CS0304.cs  
// Compile with: /target:library.  
class C<T>  
{  
    // The following line generates CS0304.  
    T t = new T();  
}  

また、クラスのメソッド内で new 演算子は使用できません。

// Compile with: /target:library.  
class C<T>  
{  
    public void ExampleMethod()  
    {  
        // The following line generates CS0304.  
        T t = new T();  
    }  
}  

このエラーを回避するには、次の例に示すように new() 制約を使用してクラスを宣言します。

// Compile with: /target:library.  
class C<T> where T : new()  
{  
    T t = new T();  
  
    public void ExampleMethod()  
    {  
        T t = new T();  
    }  
}  

関連項目