Compilerfehler CS0304Compiler Error CS0304

Eine Instanz des Variablentyps „type“ kann nicht erstellt werden, da sie nicht über die new()-Einschränkung verfügt.Cannot create an instance of the variable type 'type' because it does not have the new() constraint

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.When you implement a generic class, and you want to use the new keyword to create a new instance of any type that is supplied for a type parameter T, you must apply the new() constraint to T in the class declaration, as shown in the following example.

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 Standardkonstruktor verfügt.The new() constraint enforces type safety by guaranteeing that any concrete type that is supplied for T has a default, parameterless constructor. 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.CS0304 occurs if you attempt to use the new operator in the body of the class to create an instance of type parameter T when T does not specify the new() constraint. Auf der Clientseite, wenn der Code versucht, die generische Klasse mit einem Typ zu instanziieren, der über keinen Standardkonstruktor verfügt, wird der Code den Compilerfehler CS0310 generieren.On the client side, if code attempts to instantiate the generic class with a type that has no default constructor, that code will generate Compiler Error CS0310.

Im folgenden Beispiel wird CS0304 generiert.The following example generates CS0304.

// 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.The new operator also is not allowed in methods of the class.

// 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.To avoid the error, declare the class by using the new() constraint, as shown in the following example.

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

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

Siehe auchSee Also

C#-CompilerfehlerC# Compiler Errors