2013-08-19 58 views
3

我在與一個參考奇數問題彙編我可以導入一個命名空間,但不能使用

我有一個VS2008項目,它引用了一個組裝與RootNamespace Business.CHHS完全限定類名。當我導入命名空間,包含的類正確曝光

Working

但是,如果我轉而使用完全合格的名稱,它再也找不到引用的命名空間或它的類型。

NotWorking

我肯定把在參考和建造的解決方案(一切編譯第一個例子)。當我在進口語句中輸入命名空間時,我得到了CHHS的完整智能感知支持,當我指定變量類型時,CHHS不顯示在Business命名空間下。

Q這是怎麼回事?

回答

8

只要您嘗試使用同時存在於當前作用域名稱空間層次結構中的名稱空間,就會發生這種情況。讓我用下面的例子來解釋我:

假設你有下面的代碼:

Namespace Company.Application 
    Module Module1 
     Sub Main() 
      'Code Goes Here 
     End Sub 
    End Module 
End Namespace 

Namespace Company.Application 
    Public Class ApplicationClass 
    End Class 
End Namespace 

Namespace Company.Business 
    Public Class BusinessClass 
    End Class 
End Namespace 

Namespace Business 
    Public Class RootLevelBusiness 
    End Class 
End Namespace 

現在讓我們看看什麼是暴露我們去的時候使用Business命名空間在我們的模塊(我們應該預料到看到RootLevelBusiness

Business

但我們不要!

這是因爲代碼已經工作了,它在當前名稱空間的層次結構中找到了方法,並在找到根之前找到了一個業務類。爲了幫助證明,看看會發生什麼,當我們包括Company

Company

你會看到,Company是灰色的,因爲它並不需要它。它將運行相同的代碼,無論它是否來自公司,因爲我們已經在名稱空間中。

解決方法 - 使用Global

如果您想在線資格類,你需要告訴編譯器解析類時不看你的當前命名空間內的一種方式。對於這一點,使用Namespace Global其中規定:

一種新的方式,以「逃離」你的班列項目的根命名空間的

global

全球告訴編譯器從頭開始,在這種情況下,我們立即找到商業命名空間。

您可以通過Imports聲明不使用全局添加類的原因是因爲Imports是默認的全局。由於必須在定義任何Namespaces之前聲明Imports,因此您可以(儘管可能不應該)聲明儘可能多的名稱空間,但導入語句無法推測該命名空間將在該文件其餘部分的任何後續代碼塊中的內容如你想在一個單一的文件。出於這個原因,Imports將始終從任何名稱空間的根開始,並且工作正在進行。

相關問題