[英]How to assign same class object declared in 2 different namespaces
我有一個帶有類的Web服務項目(讓我們將其稱為webservice.classA)。
我有另一個類項目,該類項目生成一個dll,該dll在其自己的名稱空間中引用該類並實例化它的一個實例(我們將其稱為dlls名稱空間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”的方法。
您有名字沖突。 避免這種情況的一種受支持的方式(不要為您的類命名相同)是為其中一個類定義using別名 :
using webservice.classA = myWebserviceClassA;
您說得對...在命名方面確實存在設計缺陷。
讓我們假設:
您有一個名為MyClass
的類
該類在命名空間中都存在abc.xyz.qwe.tyu.MyClass
並在命名空間中sed.qwe.dfg.ert.MyClass
解決方法是-
using NS1 = abc.xyz.qwe.tyu.MyClass;
using NS2 = sed.qwe.dfg.ert.MyClass;
這樣可以避免沖突。 另外,如果名稱空間很長,則很有用 。
進一步的參考:(摘自有關using
Directive的 MSDN文章)
using指令的范圍僅限於出現該指令的文件。
創建using別名,以使將標識符限定為名稱空間或類型變得更加容易。
創建using指令以使用名稱空間中的類型,而不必指定名稱空間。 using指令不能使您訪問嵌套在指定名稱空間中的任何名稱空間。
將復制定義行更改為:
dllnamespace.webservice.classA copy = null;
僅僅是問題-您不能在一個以上的命名空間中擁有一個類。 這就是名稱空間的設計目的-防止不同人編寫的具有相同名稱的類出現別名。 您需要確定一個名稱空間擁有該類,而另一個名稱空間則要導入它。 或者,如果dll和Web服務是同一分布式應用程序的一部分,則它們應使用相同的名稱空間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.