2016-04-18 11 views
1

Ich habe eine externe DLL erstellt, die als Klassenname haben: User. Ich habe es in ein anderes Programm importiert, dieses hat den gleichen Klassennamen User. Nun, wenn ich tippe: User. für den Zugriff auf die Methode der DLL, zeigen die Intellisense stattdessen mir die Methode der Klasse User meines eigenen Programms natürlich. Ein praktisches Beispiel:Dll mit demselben Klassennamen

[DLL]:

public class User{ 
    ... some method ... 
} 

[Programm die DLL implementieren]

using User; 

public class User{ 

     public void getUsers(){ 
      User. //can't access to dll method 
     } 
} 

Jede Idee, dieses Problem beheben? Bitte beachten Sie, dass der Namensraum unterschiedlich ist.

+0

sind auch die Namensräume ist gleich? –

+0

Nein, der Namespace ist anders – IlDrugo

+0

Ich vermute, Sie wollen 'global :: User', aber es ist nicht ganz klar - wir wissen auch nicht, warum Sie' User' in Backticks in den Klassen-Deklarationen gesetzt haben ... –

Antwort

3

Es ist schwer, aus Ihrem Beispiel zu sagen, aber es sieht aus wie das, was Sie Wollen ist ein extern Alias ​​Direktive. Sie können sie hier eine kurze Anleitung lesen:

https://blogs.msdn.microsoft.com/ansonh/2006/09/27/extern-alias-walkthrough/

und die Dokumentation für das Formular Kommandozeile ist hier:

https://msdn.microsoft.com/en-us/library/ms173212.aspx

Ihres DLL Montage Foo.dll ist Nehmen wir an. Also, was Sie tun würden, ist zunächst fügen Sie einen Alias ​​ auf die referenzierte Foo.DLL, nennen Sie den Alias ​​"Foo". Zweitens, eine Richtlinie zu Ihren Namensraum-Richtlinien hinzu:

extern alias Foo; 

Dann in Ihrem Programm Sie Foo::User und die Compiler sagen können, werden wissen, dass Sie die User von Foo.DLL und nicht derjenige von der aktuellen Zusammenstellung bedeuten.

+0

Haben Sie es, also sollte dieser Alias ​​in der Software hinzugefügt werden, die die DLL verwenden? Es ist nicht möglich, diese Operation in der DLL selbst zu machen? – IlDrugo

+3

@IlDrugo: Gut, wenn Sie Ihre Kommentare betrachten, sieht es so aus, als ob die User-Klasse in der DLL in einem anderen Namespace ist als der in der neuen Compilation. In diesem Fall würde ich die Verwendung mit dem Namespace vollständig qualifizieren. –

+1

Oder verwenden Sie einen Alias, wenn er häufig verwendet wird: 'using MyUser = MyNamespace.User;' –

2

Verwenden Sie den vollständigen Namespace Ihrer DLL, um die User Klasse aufzurufen. Etwas wie folgt aus:

YourClassLibrary1.User user = new YourClassLibrary1.User(); 
user.getUsers(); 

Oder durch einen Alias ​​wie folgt aus:

using DLLUser = ClassLibrary1.User; 

Dann:

DLLUser user = new DLLUser(); 
user.getUsers(); 
+0

Das lösen tatsächlich das Problem, Zugriff durch den Namespace. Aber ist eine gute Lösung? Gibt es eine andere Möglichkeit, direkt auf den Klassen-DLL-Namen zuzugreifen? – IlDrugo

+0

@ IlDrugo ...Ja, indem Sie es Ihrer using-Direktive hinzufügen, aber da Sie zwei Klassen mit demselben Namen haben, bezieht es sich auf eins in Ihrem Hauptprojekt, also müssen Sie entweder den vollen Namespace Ihrer DLL verwenden oder einen Alias ​​verwenden. –

2

Sie können auch einen Alias ​​in Ihrem Code verwenden:

using MyUser = User; 

public class User{ 

     public void getUsers(){ 
      MyUser.User.<any property or public method> 
     } 
} 
Verwandte Themen