Поделиться через


Ошибка компилятора CS0304

Обновлен: Ноябрь 2007

Сообщение об ошибке

Невозможно создать экземпляр типа переменной 'type', потому что он не имеет ограничения new()
Cannot create an instance of the variable type 'type' because it does not have the new() constraint

Эта ошибка происходит при использовании ключевого слова new для создания экземпляра переменной типа, если эта переменная типа не определяет ограничение new(). Нельзя использовать ключевое слово new для непосредственного вызова конструктора неизвестного типа, если не используется ограничение new(), чтобы гарантировать существование конструктора по умолчанию. Если использовать ограничение new нельзя, следует рассмотреть возможность использования для доступа к нужному конструктору выражения typeof.

Следующий пример проводит к генерированию ошибки CS0304:

// CS0304.cs
// compile with: /target:library
class C<T>
{
   T t = new T();   // CS0304
}

Оператор new в этой форме также недопустим в методах класса:

// CS0304_2.cs
// compile with: /target:library
class C<T>
{
   public void f()
   {
      T t = new T();  // CS0304
   }
}