gpt4 book ai didi

.net - 我可以导入命名空间,但无法使用完全限定的类名

转载 作者:行者123 更新时间:2023-12-02 19:54:57 24 4
gpt4 key购买 nike

我在引用程序集时遇到了奇怪的问题

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

Working

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

NotWorking

我确实已经放入了引用文献并构建了解决方案(第一个示例中的所有内容都已编译)。当我在导入语句中输入命名空间时,我获得了对 CHHS 的完整智能感知支持,当我指定变量类型时,CHHS 不会显示在业务命名空间下。

:这是怎么回事?

最佳答案

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

假设您有以下代码:

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

但我们不!!!

这是因为代码已经沿着当前 namespace 的层次结构向上运行,并在到达根之前找到了业务类。为了帮助证明这一点,看看当我们包含 Company 时会发生什么:

Company

您会看到Company显示为灰色,因为它不需要它。它将运行相同的代码,无论是否来自 Company,因为我们已经位于 Company.Application 命名空间中。

解决方案 - 使用Global

如果您想内联限定类,则需要一种方法来告诉编译器在解析类时不要查看当前 namespace 的内部。为此,请使用 Namespace Global其中提供:

a new way to “escape” your classes out of the project’s Root Namespace

global

Global 告诉编译器从头开始,在这种情况下我们立即找到 Business 命名空间。

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

关于.net - 我可以导入命名空间,但无法使用完全限定的类名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18315662/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com