Compilerfehler CS0304

Eine Instanz des Variablentyps „type“ kann nicht erstellt werden, da sie nicht über die new()-Einschränkung verfügt.

Wenn Sie eine generische Klasse implementieren, und Sie das new-Schlüsselwort verwenden möchten, um eine neue Instanz eines beliebigen Typs zu erstellen, die für einen Typparameter T angegeben wird, müssen Sie die new()-Einschränkung auf T in der Klassendeklaration anwenden, wie im folgenden Beispiel gezeigt.

class C<T> where T : new()  

Die new()-Einschränkung erzwingt Typsicherheit, indem sichergestellt wird, dass jeder konkrete Typ, der für T angegeben ist, über einen parameterlosen Konstruktor verfügt. Der Fehler CS0304 tritt auf, wenn Sie versuchen, den new-Operator im Text der Klasse zur Erstellung einer Instanz des Typparameters T zu verwenden, wenn T die new()-Einschränkung nicht angibt. Wenn der Code versucht, die generische Klasse mit einem Typ zu instanziieren, der über keinen parameterlosen Konstruktor verfügt, wird auf der Clientseite der Code den Compilerfehler CS0310 generieren.

Im folgenden Beispiel wird CS0304 generiert.

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

Der new-Operator ist auch nicht in den Methoden der Klasse zulässig.

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

Um den Fehler zu vermeiden, deklarieren Sie die Klasse mithilfe der new()-Einschränkung, wie im folgenden Beispiel gezeigt.

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

Weitere Informationen