2010-07-19 107 views
2

宣佈我有一個一流的web服務項目(讓我們把它稱爲webservice.classA)。如何分配同一類對象在2名不同的命名空間

我有生產它引用在自己的命名空間中的類和實例化它的一個實例一個DLL另一個類的項目(可以調用的DLL名稱空間dllnamespace)。

在另一個項目中,我要訪問的成員在DLL

例如

using webservice; 

namespace other_project 
{ 
    class B 
    { 
     classA copy = null; 
     //.... 
     dllnamespace.dostuff(); // amongst other things instantiates a classA object 
     //.... 
     copy = dllnamespace.getclassA(); // method to return classA member 

編譯器錯誤我得到的是不能從dllnamespace.webservice.classA轉換類型other_project.webservice.classA

我想我有一個基本的設計缺陷,但我想一定有(?)一在多個名稱空間中聲明/使用「webservice.classA」的方法。

回答

1

更改複印定義行:

dllnamespace.webservice.classA copy = null; 
2

你有一個名稱衝突。避免這種(未命名你的類相同的簡稱)的支持方式,是定義一個using alias的類別之一:

using webservice.classA = myWebserviceClassA; 
+0

我不確定RHS上的別名是否正確?!?。 – 2010-07-19 22:01:45

+0

@Shankar,支持以這種方式聲明別名。隨意查看編譯器:-)(順便說一下,它對應於答案中第二個鏈接示例)。 – driis 2010-07-19 22:03:43

+0

我知道這個邊界nitpicking :-) ...但只是在我的VS 2008檢查...有右側的別名確實給編譯器錯誤。假設-myWeberviceClassA -...出現在等式左邊的...... :-) ......這是正確的。 – 2010-07-19 22:15:16

-1

這只是問題 - 你不能有一個類在多個名稱空間。這是命名空間的設計目的 - 防止不同人寫的同名類別出現鋸齒。你需要決定你的一個命名空間來擁有這個類,並在另一個命名空間中導入它。或者,如果dll和web服務是同一個分佈式應用的一部分,那麼他們應該使用相同的命名空間。

+0

我很新(bleedin'顯而易見)到命名空間。我懷疑你是正確的,在這種情況下,「其他」項目具有相同的命名空間是有意義的。 – pyb 2010-07-19 22:11:11

2

你是對的...的設計缺陷確實在命名方面存在的。

我們假設:

  • 您有一個名爲類 MyClass

  • 類存在在namespace- ​​

  • 和命名空間 - sed.qwe.dfg.ert.MyClass

解決方法是 -

using NS1 = abc.xyz.qwe.tyu.MyClass; 
using NS2 = sed.qwe.dfg.ert.MyClass; 

這樣你可以避免衝突。 此外,如果您有很長的命名空間有用。

進一步參考:(從MSDN物品上using Directive

  • 使用一個指令的範圍是有限 的文件,在其中它 出現。

  • 創建使用別名,以使其更容易符合標識符到 命名空間或類型。

  • 使用指令創建指令可以在名稱空間中使用類型,而不必指定名稱空間。 A 使用指令不允許您訪問嵌套在您指定的命名空間中的任何命名空間。