2016-11-26 49 views
1

假设我们有两个具有不同名称空间的项目。为什么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命名空间,而我已经提到使用ModelsSharedClasses

对于我来说,最应优先考虑using Models = SharedClasses;

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

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

+0

你包括你的命名空间或在某处放置一个程序集引用? <我不明白我> – devRicher

+0

@devRicher我已经添加了参考,它也包含在'using Models = SharedClasses;' –

+0

如果你不使用Models = SharedClasses? – mayu

回答

2

没有别名是不同的。

using Models = SharedClasses; 

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

Using alias directive

相关问题