Generika: Was ist eine "CONSTRUCTOR Constraint"?

8

Ich habe eine benutzerdefinierte TObjectList-Nachkommenschaft erstellt, die Unterklassen einer Basisobjektklasse enthalten soll. Es sieht ungefähr so ​​aus:

%Vor%

Ich möchte, dass jede neue Liste mit einem leeren Objekt beginnt. Es ist ziemlich einfach, oder? Aber der Compiler mag es nicht. Es sagt:

"Kann keine neue Instanz ohne CONSTRUCTOR-Einschränkung in der Typparameterdeklaration erstellen" Ich kann nur vermuten, dass dies etwas Generika-bezogenes ist. Jeder hat eine Idee, was los ist und wie ich diesen Konstruktor zum Laufen bringen kann.

    
Mason Wheeler 20.12.2008, 20:17
quelle

2 Antworten

16

Sie versuchen, eine Instanz von T via T.Create zu erstellen. Dies funktioniert nicht, weil der Compiler nicht weiß, dass Ihr generischer Typ einen parameterlosen Konstruktor hat (denken Sie daran: das ist keine Voraussetzung). Um dies zu korrigieren, müssen Sie eine Konstruktoreinschränkung erstellen, die wie folgt aussieht:

%Vor%

oder, in Ihrem speziellen Fall:

%Vor%     
Konrad Rudolph 20.12.2008, 20:23
quelle
2

Nur ein kurzes Update zu einer alten Frage ..

Sie benötigen die Konstruktoreinschränkung nicht und können dies auch für Objekte mit Parametern tun, indem Sie RTTI wie folgt verwenden (RTTI oder System.RTTI mit XE2 verwenden)

%Vor%

Wenn Sie Parameter haben, fügen Sie sie einfach so hinzu

%Vor%     
Atle S 04.09.2011 20:04
quelle