.net 我可以导入名称空间,但可以';不要使用完全限定的类名

.net 我可以导入名称空间,但可以';不要使用完全限定的类名,.net,vb.net,namespaces,.net,Vb.net,Namespaces,我有一个关于集会的奇怪问题 我有一个VS2008项目,它引用了根命名空间为Business.CHHS的程序集。当我导入名称空间时,包含的类被正确地公开 但是,如果改用完全限定名,它将无法再找到引用的命名空间或其类型 我已经明确地输入了参考资料并构建了解决方案(在第一个示例中,所有内容都进行了编译)。当我在imports语句中输入名称空间时,我获得了对CHHS的完全intellisense支持,当我指定变量类型时,CHHS不会显示在业务名称空间下 Q:这是怎么回事?当您试图使用一个名称空间,而

我有一个关于集会的奇怪问题

我有一个VS2008项目,它引用了根命名空间为
Business.CHHS
的程序集。当我导入名称空间时,包含的类被正确地公开

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

我已经明确地输入了参考资料并构建了解决方案(在第一个示例中,所有内容都进行了编译)。当我在imports语句中输入名称空间时,我获得了对CHHS的完全intellisense支持,当我指定变量类型时,CHHS不会显示在业务名称空间下


Q:这是怎么回事?

当您试图使用一个名称空间,而该名称空间也存在于当前作用域名称空间的层次结构中的任何位置时,就会发生这种情况。让我用下面的例子来解释:

假设您有以下代码:

Namespace Company.Application
模块1
副标题()
“代码在这里
端接头
端模块
结束命名空间
名称空间公司.应用程序
公共类应用程序类
末级
结束命名空间
名称空间公司业务
公务舱
末级
结束命名空间
名称空间业务
公营业务
末级
结束命名空间
现在,让我们看看当我们在模块中使用
业务
名称空间时会暴露出什么(我们应该看到
RootLevelBusiness
类)

但我们没有!!!

这是因为代码已经在当前名称空间的层次结构上运行,并在到达根目录之前找到了一个业务类。为了帮助证明这一点,请查看当我们包含
公司时会发生什么:

您将看到,
公司
由于不需要它而变灰。它运行的代码可能与来自公司的代码相同,也可能与来自公司的代码相同,因为我们已经在
公司
应用程序
命名空间中

解决方案-使用
Global
如果希望内联限定类,则需要一种方法,告诉编译器在解析类时不要查看当前命名空间的内部。为此,请使用提供了:

从项目的根命名空间中“转义”类的新方法

Global告诉编译器从头开始,在这种情况下,我们会立即找到业务名称空间

您可以通过语句添加类而不使用Global的原因是,
Imports
在默认情况下是全局的。因为在定义任何
namespace
之前必须声明
Imports
,所以Imports语句无法假定名称空间将位于该语句其余部分的任何后续代码块中e文件,因为您可以(尽管可能不应该)在单个文件中声明所需的任意多个名称空间。因此,导入将始终从任何名称空间的根开始,一直向下进行