2016-04-18 10 views
1

クラス名がUserの外部DLLを作成しました。別のプログラムでインポートしましたが、これは同じクラス名Userです。今私が入力した場合:User.は、dllのメソッドにアクセスするためにintellisense私のクラスのメソッドを示す代わりにUserもちろん自分のプログラムです。実践例:同じクラス名のDLL

[DLL]:

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

[DLLを実装するプログラム]

using User; 

public class User{ 

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

この問題を解決するために、任意のアイデア?名前空間が異なることに注意してください。

+0

等しいていますか? –

+0

いいえ、名前空間は異なります – IlDrugo

+0

'global :: User'が必要だと思っていますが、それは完全ではありません。クラス宣言で' User'をバッククォートに入れた理由はわかりません... –

答えて

3

あなたの例から言うのは難しいですが、それは何のように見えるこのような何か欲しいのはexternエイリアス指令です。

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

を、コマンドライン形式のドキュメントはこちらです:あなたはここでそれらの短いチュートリアルを読むことができます

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

のは、あなたのDLLアセンブリがFoo.DLLあるとしましょう。だから、まず最初にという別名を参照されるFoo.DLLに追加し、エイリアス "Foo"を呼び出します。第二に、あなたの名前空間ディレクティブにディレクティブを追加します。

extern alias Foo; 

は、その後、あなたのプログラムの中で、あなたはFoo::Userを言うことができるし、コンパイラは、現在のコンパイルから1 Foo.DLLからUserを意味していないことを知っているだろう。

+0

このエイリアスは、dllを使用するソフトウェアに追加する必要がありますか?これはdll自体でこの操作を行うことはできませんか? – IlDrugo

+3

@IlDrugo:あなたのコメントを見てみると、DLLのUserクラスが新しいコンパイルの名前空間とは異なる名前空間にあるように見えます。だからその場合、私は名前空間の使用法を完全に修飾するだけです。 –

+1

または、それが頻繁に使用される場合はエイリアスを使用してください: 'Using MyUser = MyNamespace.User;' –

2

DLLの完全な名前空間を使用して、Userクラスを呼び出します。

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

またはこのようエイリアスを使用して::

using DLLUser = ClassLibrary1.User; 

その後:

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

これは実際に問題を解決し、名前空間によるアクセスを解決します。しかし、良い解決策ですか?クラスdllの名前に直接アクセスする別の方法がありますか? – IlDrugo

+0

@IlDrugo ...はい、それをusingディレクティブに追加することで、同じ名前のクラスが2つあるため、メインプロジェクトのクラスを参照するため、DLLの完全な名前空間を使用するか、エイリアスを使用する必要があります。 –

2

また、あなたのコード内でエイリアスを使用することができます。名前空間も

using MyUser = User; 

public class User{ 

     public void getUsers(){ 
      MyUser.User.<any property or public method> 
     } 
} 
関連する問題