コンパイラ エラー CS0304
変数型 '<型>' のインスタンスは、new() 制約を含まないため、作成できません
ジェネリック クラスを実装し、new
キーワードを使用して型パラメーター T
に指定する任意の型の新しいインスタンスを作成する場合は、次の例に示すように、クラス宣言で new() 制約を T
に適用する必要があります。
class C<T> where T : new()
この new()
制約によって、T
に指定される任意の具象型にパラメーターなしのコンストラクターがあることが保証されることで、タイプ セーフが実現されます。 CS0304 は、型パラメーター T
で new()
制約を指定していないときに、クラスの本体で 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();
}
}
関連項目
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET