簡體   English   中英

如何分配在2個不同名稱空間中聲明的相同類對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM