为什么C#不会在模糊命名空间上抛出错误?

时间:2016-11-26 10:52:53

标签: c#

假设我们有两个具有不同命名空间的项目。

using Models = SharedClasses;

namespace MainAspNetMvcApplication{
   private void Method1(){
     var c = new Models.Cat();
     //Error    CS0234  The type or namespace name 'Cat' does not exist in the namespace 'MainAspNetMvcApplication.Models' (are you missing an assembly reference?)
   }
}

namespace MainAspNetMvcApplication.Models{
  //There is no class `Cat` in this namespace
  public class Dog {
    ...
  }
  ...

}

我添加了对包含以下代码的SharedClasses的引用。

namespace SharedClasses{
  public class Cat{
    //The code for shared classe (Cat)
  }
}

这更像是一个模棱两可的Models错误。但是,C#假定当前项目Models命名空间并引发CS0234错误。

为什么默认情况下c#会假设当前项目Models名称空间,而我提到Models使用SharedClasses

对我来说,using Models = SharedClasses;

应该考虑最高优先级

不应该至少C#让我知道我有两个含糊不清Models而不是选择一个?

好奇为什么C#这样设计。虽然我正在寻找语言设计师来回答任何其他相关的答案,但欢迎。

1 个答案:

答案 0 :(得分:2)

别名不同。

using Models = SharedClasses;

现在Models是一个别名而不是命名空间,所以它不是一个空间命名空间,有多个规则概述你可以在这里找到它们的别名行为:

Using alias directive