奇怪的C#命名空间问题

问题描述:

我有包含其中的一个内有若干命名空间和多类项目 - >奇怪的C#命名空间问题

Some.Namepsace. (namespace) 
       ExistingClass (class) 
       ExistingClass2 (class) 
       Constants (class) 
         .Enum (enum) 

在这个项目中,我创建了一个类,但有一个不正确的命名空间,像这样

namespace Some.Namespace.Some.Namespace 
{ 
    public class NewClass {} 
} 

现在Some.Namespace.ExistingClass无法解决参考Some.Namespace.Constants.Enum - 这似乎是在寻找Some.Namespace.Some.Namespace.Constants.Enum。

任何想法为什么? NewClass没有引用任何东西,也没有被任何东西引用,所以我没有看到它的命名空间如何影响其他任何组件。我修复了NewClass的命名空间问题,并解决了它。

+0

你是说现在它可以工作,而你只是想知道它为什么发生,或者它仍然不能与固定的命名空间一起工作? – 2010-12-15 20:22:15

+0

现在工作,只是想知道为什么 – Dlongnecker 2010-12-15 20:30:23

+0

我很难理解你所描述的所有类型和名称空间之间关系的文章。如果你只是给我们一些问题的回应?代码是什么样的? – 2010-12-15 21:48:25

这必须与Visual Studio/csc中的C#尝试解析引用的方式有关。这样看来它是这样的:相对于调用对象

  • 的命名空间

    • 看,如果没有找到这样的命名空间,尝试查找参考,仿佛这是绝对

    在我的情况下,在我添加Some.Namespace.Some.Namespace.NewClass之前,当VS尝试将Some.Namespace.ExistingClass的引用解析为Some.Namespace.Constants.Enum时,它首先尝试进行相对名称空间查找(从ExistingClasse的Some.Namespace开始),未找到这样的名称空间。然后它尝试绝对查找并找到它。

    在我加入Some.Namespace.Some.Namespace.NewClass之后,它找到了命名空间,注意到对象不在那里,并决定停止搜索。

  • Some.Namespace.Some.Namespace类将尽力解决Some.Namespace.Constants.Enum 为:Some.Namespace.Some.Namespace.Constants.Enum,不一些。 Namespace.Constants.Enum

    如果您试图将枚举引用为:global :: Some.Namespace.Constants.Enum,它会起作用。

    +0

    很好的明确答案时,它总是很清楚,这并不能回答我最初混淆的问题。我清除了我的问题。 – Dlongnecker 2010-12-15 20:35:16