Entwickler-Ecke

Basistechnologien - Methoden einer Klasse aus einem anderen Namespace benutzen


scw1963 - Fr 18.11.11 14:15
Titel: Methoden einer Klasse aus einem anderen Namespace benutzen
Ich würde gerne in einer Klasse im Namespace a Methoden aus einer Klasse, die im Namespace b definiert sind, benutzen. Normalerweise würde ich dann Namespace b mit "using" bekannt machen. Das geht aber nicht, da es dann zu einem Ringverweis kommt, da der Namespace a schon in b mit using a; bekannt gemacht wurde. (Wie) kann ich trotzdem die entsprechenden Methoden nutzen?

Es wäre schön, wenn es auch ein kleines Beispiel dazu geben könnte.

Vielen Dank

Sepp


Christian S. - Fr 18.11.11 14:39

Hallo!

Ringverweise bei Namespaces gibt es nicht, die können sich durchaus beide gegenseiting referenzieren. Meinst Du eventuell, dass die Klassen in unterschiedlichen Assemblies liegen, die Du als Referenzen gegenseitig einfügen möchtest?

Grüße,
Christian


scw1963 - Fr 18.11.11 14:59

Hallo Christian,

ja, die Klassen, bzw. Namespaces liegen nicht nur in verschiedenen Dateien, sondern auch in verschiedenen Assemblys. Gibt es dafür auch eine Lösung?

Sepp


Christian S. - Fr 18.11.11 15:08

Hallo,

wahrscheinlich könnte man sich da was zurecht basteln, wenn man die Assemblies dynamisch lädt (ohne es ausprobiert zu haben), aber besser wäre es, glaube ich, sich mal die Klassenstruktur anzusehen, ob das so sein muss. Das kommt mir nämlich einigermaßen ungewöhnlich vor.

Grüße,
Christian


scw1963 - Fr 18.11.11 15:13

Das Problem ist, dass es ein "gewachsenes" Projekt ist, wo mehrere Entwickler mitgearbeitet haben, und auch eine offene Bibliothek mit eingearbeitet wurde, sodass es schwierig sein würde, etwas grundlegendes zu ändern...

Man sagte mir, dass man mit Interfaces etwas machen kann. Bzgl. Daten habe ich das auch realisieren können. Aber mit den Methoden klappt das nicht.


Ralf Jansen - Fr 18.11.11 17:50

Das über Interfaces zu lösen läuft letztlich läuft darauf hinaus was Christian gesagt hat. Das geht. Die Klassen und deren Funktionalitäten in den Assemblies richtig logisch zu verteilen wäre aber erstmal anzuraten. Wenn dann immer noch entsprechende gegenseitige Bezüge existieren was, nur bei einem sehr unglücklichen Systemdesign vorkommt, kann man immer noch eine Interface Assembly dazwischen schalten und irgendeine Fabric implementieren die das Interface mit einer konkreten Klasse hinter füttert.