2012-02-15 41 views
0

我有一個我已經包含在C#項目中的DLL。我們將其稱爲「one.dll」 此DLL包含一個名爲「staticclass」的靜態類在C#中使用兩個同名的靜態類

我有另一個DLL,我也包含在同一個項目中。讓我們把它稱爲「two.dll」 此DLL中還含有名爲「staticclass」

現在,當我包括我的項目中同時兼具的DLL靜態類,並嘗試訪問「staticclass」那麼自然它給錯誤。有沒有一種方法可以改變類的名稱或給它一種別名,所以我們可以說「one.dll」中的「staticclass」將保持原樣,並且我可以給「staticclassTwo」提供別名,它是「two .DLL」

請注意,我沒有訪問源編解碼器都‘one.dll’和‘two.dll’

+2

您可以使用該類的完全限定名稱 - 即包含名稱空間 – Jason 2012-02-15 06:28:09

回答

8

(我假設這兩個類也都在同一個命名空間。如果他們不是,這很容易 - 只需使用簡單的using指令作爲別名,或代碼中的完全限定名稱。)

確實可以給一個別名 - 一個extern alias。實際上,這將「彙編」添加爲名稱空間差異化的另一個級別。

顯然你應該儘量避免這種情況,但很高興C#提供了一種當你絕對需要時非常明確的方法。

Anson Horton有一個good walkthrough爲您如何在實踐中使用它們。

+0

這兩個類可以或不可以位於相同的名稱空間中。我不知道。我只是在我的項目中添加了該DLL的引用,然後當我鍵入「staticclass」並在其後給出一個點時,它會給出我可用的方法和屬性列表。我的意思是我甚至沒有聲明它的名字空間。只需添加DLL並開始使用它的類。 – Ali 2012-02-15 06:41:05

+0

Ali如果您在解決方案資源管理器中打開參考文件夾,則可以雙擊組件並在對象瀏覽器中打開該組件。這將讓你看到這個程序集有哪些命名空間以及這些命名空間中的類 – Despertar 2012-02-15 06:46:19

+0

對不起,我在我之前的評論中犯了一個錯誤,那是我實際上在上面聲明瞭命名空間。兩個命名空間在兩個DLL中都是相同的,所以我使用了Jon Skeet告訴的extern alias,它起作用!謝謝。 – Ali 2012-02-15 06:55:09

0

您可以簡單地使用別名

在您的代碼中,正下方的命名空間行; 使用別名下面給出:

namespace ConsoleApp 
{ 

    using ClassOne = Assembly.One.MyClass; /* your dll 1 class */ 
    using ClassTwo = Assembly.Two.MyClass; /* your dll 2 class */ 

    class Program 
    { 

     static void Main(string[] args) 
     { 

      ClassOne one = new ClassOne(); 
      // Do your stuff with ClassOne object 

      ClassTwo two = new ClassTwo(); 
      // Do your stuff with ClassTwo object 

     } 
    } 
} 

希望這有助於!