2009-03-13 4 views
0

Ich bin neu in C# und ich versuche herauszufinden, ob ich mehrere abgeleitete Klassenbibliotheken erstellen kann, die jeweils ein bestimmtes Element darstellen. Ich rufe die beiden Klassenbibliotheken ClassA & ClassB an. Jede Klasse teilt sich eine BaseClass (Namensraum BaseNS).C# mehrere Klassenbibliothek mit gemeinsamer Basisklasse/Namespace Problem

Ich erstellte dann eine C# App, die sowohl ClassA als auch ClassB betrifft. Dies führte zu einem Fehler, da beide die gleiche BaseClass haben. Kein Problem, ich habe 'Alias' auf der Referenz verwendet. Das hat gut funktioniert. So habe ich:

extern alias Class1Alias; extern alias Class2Alias; ...

Hier ist, wo ich auf ein Problem stoße.

Ich möchte eine Funktion machen, die BaseClass als Argument verwendet.
public void SetData (BaseClass bc) {} Dies kann nicht ausgeführt werden, da BaseClass aufgrund des Alias ​​nicht definiert ist. So muss es sein: public void SetData (Class1Alias.BaseNameSpace.BaseClass bc) {}

Dies funktioniert, aber jetzt möchte ich folgendes tun: ...

Class1Alias.Class1Space.Class1 c1 = new Class1Alias.Class1Space.Class1(); 
Class2Alias.Class2Space.Class2 c2 = new Class2Alias.Class2Space.Class2(); 

das funktioniert

Class1Alias.BaseNameSpace.BaseClass bc = (Class1Alias.BaseNameSpace.BaseClass)c1; 
SetData(bc); 

dies nicht

Class1Alias.BaseNameSpace.BaseClass bc = (Class1Alias.BaseNameSpace.BaseClass)c2; 
SetData(bc); 

ich versuchte Casting Es geht um Class2Alias, das funktioniert, aber dann kann ich meine SetData-Funktion nicht aufrufen, weil sie eine Class1Alias ​​will.

Gibt es sowieso um dies zu umgehen?

Antwort

2

Ihre Terminologie ist etwas verwirrend. Sie beziehen sich auf "Klassenbibliotheken" in einer Weise, die mich denken lässt, dass Sie nur "Klasse" meinen, aber ich bin mir nicht sicher. Zum Beispiel können "Klassenbibliotheken" nicht von einer Basisklasse "abgeleitet" werden.

Sie sagten, Sie sind neu in C#. Gibt es eine andere Sprache, mit der Sie vertrauter sind? Vielleicht, wenn Sie ausdrücken könnten, was Sie in Bezug auf diese Sprache tun möchten, kann vielleicht jemand es in C# übersetzen.

+0

Nein, ich meinte "Klassenbibliotheken". Beide Klassenbibliotheken haben eine gemeinsame Basisklasse. –

+0

Wollen Sie sagen, dass Sie zwei * Klassen * in separaten Klassenbibliotheken haben, die Sie von derselben Basisklasse ableiten wollen? Wenn ja, ist das in der Tat möglich. Es kann hilfreich sein, darauf hinzuweisen, dass zwei Klassen mit genau demselben Namen, die jedoch in verschiedenen Bibliotheken definiert sind, zwei verschiedene Klassen sind. –

+0

Ja, mir ist klar, dass das mein Problem ist. Ich hatte gehofft, in der Lage zu sein, in die gemeinsame Basisklasse zu wechseln und sie zu benutzen. –

0

Ich bin mir nicht sicher, ob ich die Frage richtig verstehe. Existiert die Basisklasse in einer einzelnen Assembly oder wird sie in beide Assemblys kopiert und eingefügt? Wenn es kopiert und eingefügt wird, können Sie nicht viel tun, da der Compiler sie als zwei verschiedene Klassen betrachtet.

Legen Sie den Alias ​​für die Baugruppenreferenz im Eigenschaftenfenster der spezifischen referenzierten Baugruppe fest. Weisen Sie etwas anderem als global zu. Dann können Sie den Typ in dieser Baugruppe mit etwa wie folgt referenzieren:

+0

Richtig. Ich versuche, eine gemeinsame Basisklassendefinition für beide abgeleitete Klassenbibliotheken zu verwenden. Ich komme zu dem gleichen Schluss, dass dies nicht möglich ist. Vielen Dank. –

0

Optionen, die in den Sinn:

  1. verschmelzen die zwei Klassenbibliotheken
  2. die Basisklasse verschieben (und andere gemeinsam genutzte Schnittstellen/Klassen) in eine dritte, gemeinsame, Klassenbibliothek, können sie beide Referenz
  3. ändern sie den Namensraum zu vermeiden Basisklassennamen clashing (wenn sie nicht in der Tat der gleichen Klasse sind)