Erro do Compilador CS0304

Não é possível criar uma instância do tipo variável “tipo” porque o não tem a restrição de new()

Quando você implementa uma classe genérico, e você desejar usar a palavra-chave de new para criar uma nova instância de qualquer tipo que é fornecido para um parâmetro de tipo T, você deve aplicar novidades (restrição) a T na declaração de classe, conforme mostrado no exemplo a seguir.

class C<T> where T : new()

A restrição de new() impor a segurança de tipo garantir que qualquer tipo concreto fornecido para T tem uma opção, o construtor sem parâmetros. CS0304 ocorre se você tentar usar o operador de new no corpo da classe para criar uma instância do parâmetro de tipo T quando T não especifica a restrição de new() . No lado do cliente, se o código tentar criar uma instância da classe com um tipo genérico que não tem nenhum construtor padrão, o código gerará Erro do Compilador CS0310.

O exemplo a seguir gerenciar CS0304.

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

Também não é permitido ao operador de new os métodos da classe.

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

Para evitar o erro, declarar a classe usando a restrição de new() , conforme mostrado no exemplo a seguir.

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

    public void ExampleMethod()
    {
        T t = new T();
    }
}

Consulte também

Outros recursos

Erros do compilador de C#