Was ist der Zweck von new () während der Deklaration einer generischen Klasse?

9

Was ist der Zweck von new () während der Deklaration der BaseEntityCollection-Klasse?
Wenn ich es entfernen werde, habe ich einen Fehler mit der folgenden Nachricht erhalten: "T muss ein nicht-abstrakter Typ mit einem öffentlichen parameterlosen Konstruktor sein, um ihn als Parameter zu verwenden ..."

%Vor%     
Ahmed 18.02.2011, 21:25
quelle

7 Antworten

19

Das bedeutet, dass die Klasse, die Sie für T angeben, einen Standardkonstruktor (kein Parameter) hat.

Daher können Sie in der generischen Klasse new T() erstellen und ein neues Objekt vom Typ T erstellen.

    
David Yaw 18.02.2011, 21:27
quelle
4

Das Schreiben von new() erzwingt, dass der Parameter einen Standardkonstruktor hat.

Ohne es können Sie new T() nicht schreiben.
Ihr Fehler tritt auf, wenn Sie versuchen, einen nicht new() Typ als new() 'd Parameter zu übergeben.

Außerdem erben Sie nicht List<T> .
Stattdessen sollten Sie Collection<T> erben, das für die Vererbung vorgesehen ist.

    
SLaks 18.02.2011 21:27
quelle
1

Der Typ T muss einen parameterlosen Konstruktor haben. Dadurch können Sie neue Instanzen erstellen, indem Sie var t = new T() ausführen, was sonst nicht möglich wäre.

    
Femaref 18.02.2011 21:27
quelle
1

Dies ist die Notation für die generische Einschränkung : Sie muss einen (öffentlichen) parameterlosen Konstruktor haben.

    
Henk Holterman 18.02.2011 21:28
quelle
1

Dies bedeutet, dass Ihr generischer Typ einen parameterlosen Konstruktor haben muss.

%Vor%

Ich bin mir nicht sicher, was Sie hier tun, aber ich denke, es ist gegen Liskovs Regel. Überprüfen Sie Ihre Hierarchie.

Einschränkungen für Typparameter

    
Lukasz Madon 18.02.2011 21:30
quelle
0

Dies ist eine der möglichen generischen Einschränkungen, die Sie Ihrem generischen Typ zuordnen können. Wenn Sie die Integritätsbedingung "new ()" verwenden, können Sie nur einen generischen Typ verwenden, wenn dieser über einen parameterlosen Konstruktor verfügt. Dies kann für Dinge wie Serialisierung oder Factory-Typ-Methoden nützlich sein, wo Sie ein Objekt vom Typ T erstellen müssen.

Hier sind einige weitere allgemeine Einschränkungen: Ссылка

    
Andy White 18.02.2011 21:30
quelle
0

Es ist eine generische Einschränkung. In diesem Fall handelt es sich um eine neue Einschränkung .

    
Maciek 18.02.2011 21:33
quelle

Tags und Links