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.
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:
oder, in Ihrem speziellen Fall:
%Vor%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%Tags und Links delphi constructor generics delphi-2009