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!)
Dies sollte technisch funktionieren, vorausgesetzt, Sie ändern Class2, um this.parent = parent;
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.
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:
... außer es kann nicht, weil :this(new Class2(this))
rechtmäßig falsche Syntax ist. Genau das machst du auch. Bitte nicht.
Tags und Links c# constructor