gpt4 book ai didi

c# - 为什么编译器与继承中的 namespace 冲突

转载 作者:行者123 更新时间:2023-12-02 10:49:44 24 4
gpt4 key购买 nike

在下面的代码中

namespace Too
{
public class Foo
{

}
}

namespace Foo
{

public class Boo : Foo
{

}
}

我收到错误 'foo' is a namespace but is used like a type
如果我将继承中的 Foo类名完全限定为 Too.Foo,该错误就会消失。

为什么编译器会尝试在 namespace 没有意义的地方尝试解析 Foo命名空间而不是类?

最佳答案

编译器在初次解析名称时并不在乎您的引用是类还是 namespace 。如果名称不完全合格,它将始终尝试首先在本地 namespace 中找到它-包括 namespace 名称本身。如果在本地 namespace 中找不到它,它将尝试using指令。

之所以这样解决,是因为您最终可以创建一个 namespace 层次结构,并且所有类和 namespace 都由.分隔。因此,在解析名称时,编译器并不在乎类型,而仅在乎层次结构路径。一旦找到匹配项,它就会关心类型。在这种情况下,当它需要一个类并因此失败时,它是一个 namespace 。

对于子命名空间和子类,如果编译器仅尝试匹配一个子命名空间和子类,则很难找到匹配项;如果仅匹配同一程序集中的随机 namespace ,则可能会找到多个引用。因此,它始终始终是本地 namespace ,然后在层次结构中向上移动到其他程序集。如果由于两个都被引用的不同 namespace 中存在两个具有相同名称的子 namespace 或类而导致不清楚,则您必须更加清楚。

关于c# - 为什么编译器与继承中的 namespace 冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56240461/

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