2016-04-01 16 views
0

Ich möchte Code von Project 1 (VB.NET) in Project 2 (C# Windows Form) und umgekehrt verwenden. Ich weiß, dass wir keinen Zirkelbezug schaffen können, aber gibt es einen anderen Weg, wie wir das erreichen können?Verwenden Sie Circular Referenz

+2

Ich nehme an, dass das VB.NET-Projekt mit der Geschäftslogik verhandelt, während das C# -Projekt der UI-Teil ist? Wenn dies der Fall ist, ist etwas sehr falsch, wenn Sie die UI-Logik in die Business-Klasse aufnehmen. Das heißt, Sie können nur ein drittes Projekt erstellen, die auf alle Klassen in Projekt 1 & 2 beziehen. – Martheen

+0

+1 auf drittes Projekt. Entweder dritte Verweis auf diese beiden oder nehmen Sie aus beiden, was Sie referenzieren und dll aus diesem Code machen möchten. – Claudius

Antwort

1

Erstens, kreisförmige Referenz bedeutet falsches Design. Wenn Sie so etwas wie dieses benötigen, müssen Sie Ihr Design in eine der folgenden Arten ändern:

1. Extrahieren „circular“ Code

In der Regel eine andere Bibliothek erstellen, mit Funktionen, die von beiden genannt werden "zirkuläre" Bibliotheken. Dann machen Sie sowohl Project1 als auch Project2 abhängig von neu erstellten Project3.

2. Verwenden Sie Rückrufe

Make nur eine lib auf der zweiten abhängig - ohne Beispiel aus dem Code, es ist schwer zu entscheiden, die man auf anderen abhängig sein sollte, aber von „Windows Form“ I würde annehmen, es wäre besser, wenn Project2 von Project1 abhängig ist. Es bedeutet also, dass Project2 alles Projekt1 kennt. Und wenn Sie etwas von Project1 zurück zu Project2 aufrufen müssen, stellen Sie während der Initialisierung nur einen Rückruf bereit. Zum Beispiel Project1 enthält eine Funktion, die einige lange Berechnungen durchführt, und Sie möchten benachrichtigt werden, wenn es fertig ist. OK, kein Problem. Project2 startet den Vorgang mit Callback (sucht nach Delegaten) und setzt seine Arbeit fort. Wenn die Funktion in Project1 beendet wird, verwendet sie den bereitgestellten Callback zum Aufrufen der Funktion von Project2 (auch wenn sie diese Funktion nicht kennt, aber sie ist nicht notwendig, da der Compiler verwaltet, dass die "inkompatible" Funktion nicht als Callback bereitgestellt werden kann).

Es ist schwierig, Ihnen mehr Ratschläge zu geben, da Sie keinen Code zur Verfügung gestellt haben. Wenn Sie weitere Hilfe benötigen, aktualisieren Sie Ihre Frage bitte mit einem vereinfachten Beispiel.

+0

Werfen Sie einen Blick auf meine zwei Form-Projekt. Ich übergebe die Instanz des Hauptformulars an das untergeordnete Formular, damit die zwei Formulare Daten zwischen ihnen senden können: http://stackoverflow.com/questions/36251695/c-sharp-reference-two-forms – jdweng

+0

OK, der Code dort ist etwas unordentlich, aber von dem, was ich verstehe, wollen Sie keine Daten teilen. Sie möchten nur, dass Form2 die Liste von Form1 anzeigt. Dies ist kein Fall für eine Zirkularreferenzierung überhaupt. Machen Sie Form2-Konstruktor, um Liste von Form1 als Parameter zu übernehmen, und Sie haben es. – Zoka