Übergeben Sie im Konstruktor einen Verweis auf 'this'

8

Ich weiß, dass ich das schon einmal gemacht habe, aber ich bekomme meine Konstruktordurchführung in einer Wendung, denke ich ....

%Vor%

Problem ist, dass der Elternteil immer Null ist.

Was ist der richtige Weg, dies zu tun? (Vielleicht kann ich meine Langsamkeit dafür verantwortlich machen, eine Erkältung zu haben ..)

BEARBEITET, DIE TYPO ZU BEARBEITEN (was nicht das Problem im echten Code ist!)

    
kpollock 09.04.2009, 15:26
quelle

5 Antworten

9

Dies sollte technisch funktionieren, vorausgesetzt, Sie ändern Class2, um this.parent = parent;

einzuschließen

Allerdings empfehle ich das nicht. Ich würde stattdessen empfehlen, Ihre class2-Instanz in class1 zu initialisieren. Abhängig davon, was alles im Konstruktor von Class2 getan wird, können Sie sich potenziell in unangenehme Situationen hineinversetzen.

Wenn Sie eine Class2-Eigenschaft auf class1 setzen und sie lazy initialisieren, würde Class2 nach dem Abschluss des Konstruktors von Class1 erstellt, nicht während der Konstruktion, was wahrscheinlich weniger fehleranfällig ist, wenn Ihre Klassen komplizierter werden.

    
Reed Copsey 09.04.2009, 15:33
quelle
10

Sie haben den Code möglicherweise falsch eingegeben, aber ich denke, dass Sie diese Definition für Class2 möchten (beachten Sie das this -Kennzeichen in Ihrem Class2-Konstruktor):

%Vor%     
Keltex 09.04.2009 15:29
quelle
2
%Vor%

_parent ist niemals definiert; du hast es falsch geschrieben.

    
geowa4 09.04.2009 15:29
quelle
1

Ich verstehe nicht, warum das nicht funktionieren sollte. Es funktioniert mit mir.

erklärt: Ссылка

ist übergegangen: Ссылка

hier ist das Ergebnis: Ссылка

    
galets 09.04.2009 15:50
quelle
0

Ich weiß, das ist eine alte Frage, aber ich dachte, ich würde meine zwei Cent für ein gutes Maß werfen. Google hat mich hierher gebracht, damit es jemand anderen hierher bringen kann.

Das sieht verdächtig nach einer zirkulären Abhängigkeit aus ... es ist ziemlich der Code-Geruch, zwei unabhängige Klassen zu haben, die sich gegenseitig benutzen / referenzieren.

Wenn Sie eine Eltern / Kind-Beziehung für Objekte haben möchten, sollten Sie eine binäre Baumimplementierung (oder ähnliches) für Ihre Klasse erstellen.

Wenn Sie die Klassenvererbung ausnutzen möchten, verwenden Sie sie korrekt & gt; Class2 ist eine Basisklasse für Class1 und Ihre Class1 -Deklaration wäre public class Class1 : Class2 . Sie können auf die Methoden von Class2 in Class1 mit dem Schlüsselwort base verweisen.

Kurz gesagt lautet diese Antwort: Sie müssen Ihre Klassen so umgestalten, dass sie besser zu dem passen, was Sie erreichen wollen, anstatt den Compiler zu bekämpfen, um etwas zu tun, das verwirrender ist, als es sein muss.

Vor allem, weil der Code, mit dem Sie dies testen werden, wahrscheinlich Class1 neu erstellt und dann dieses Objekt als Verweis auf Class2 's Referenz für Class1 abfragt, was absolut sinnlos ist.

Anhängen2:

Semantisch kann Class1 folgendermaßen umgeschrieben werden:

%Vor%

... außer es kann nicht, weil :this(new Class2(this)) rechtmäßig falsche Syntax ist. Genau das machst du auch. Bitte nicht.

    
Izzy 18.07.2016 13:07
quelle

Tags und Links