Kyl*_*Mit 3 .net vb.net namespaces
我对一个程序集的引用有一个奇怪的问题
我有一个VS2008项目,它使用RootNamespace引用一个程序集Business.CHHS.导入命名空间时,所包含的类被正确公开

但是,如果我改为使用完全限定名,则它将无法再找到引用的命名空间或其类型.

我肯定已经引入了参考并构建了解决方案(在第一个示例中编译了所有内容).当我在进口语句中输入命名空间时,我获得了对CHHS的完整智能感知支持,当我指定变量类型时,CHHS没有显示在Business命名空间下.
问:这里发生了什么?
只要您尝试使用当前作用域命名空间的层次结构中任何位置的命名空间,就会发生这种情况.让我用以下示例解释一下:
假设您有以下代码:
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
Run Code Online (Sandbox Code Playgroud)
现在让我们看看当我们Business在模块中使用命名空间时会暴露什么(我们应该期待看到RootLevelBusiness类

但我们不要!!!
那是因为代码已经在当前命名空间的层次结构中工作,并在到达根目录之前找到了一个业务类.为了帮助证明这一点,看看当我们包括时会发生什么Company:

你会看到它Company是灰色的,因为它不需要它.它将运行相同的代码,无论是否来自公司,因为我们已经在命名空间中.Company.Application
Global如果您想要内联限定类,则需要一种方法来告诉编译器在解析类时不要查看当前的命名空间.为此,使用Namespace Global它提供:
一种新的方法,可以将您的类"转义"出项目的根命名空间

Global告诉编译器从头开始,在这种情况下我们立即找到Business命名空间.
您可以在Imports不使用Global Imports的情况下通过语句添加类的原因是因为默认情况下是全局的.因为你必须Imports在定义any之前声明Namespaces,所以imports语句无法在文件的其余部分中假设任何后续代码块中的命名空间,因为你可以(尽管可能不应该)声明与你一样多的命名空间想要在一个文件中.出于这个原因,Imports将始终从任何命名空间的根目录开始工作.