2016-11-26 10 views
1

名前空間の異なる2つのプロジェクトがあるとします。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エラーをスローします。

SharedClassesModelsを使用すると言われていますが、デフォルトでは現在のプロジェクトは、現在のプロジェクトModelsと仮定していますか?私にとって

、最高の優先度は、少なくともC#私は私は2つの曖昧なModels代わりのいずれかを選択を持って知っているべきではありませんusing Models = SharedClasses;

のために考慮すべき?

C#がこのように設計された理由を知りたいだけです。私は他の関連する答えに答えるために言語デザイナーを探していますが、歓迎します。

+0

あなたの名前空間が含まれましたかアセンブリ参照をどこかに置く? <私には分かりません> – devRicher

+0

@devRicherリファレンスを追加しました。また、 'Using Models = SharedClasses; 'に含まれています –

+0

Models = SharedClassesを使用しないとどうなりますか? – mayu

答えて

2

別名はありません。

using Models = SharedClasses; 

Modelsあなたがここでそれらを見つけることができ、それはambigious名前空間ではありませんので、別名の行動を概説し、複数のルールがある、別名ではない名前空間です。

Using alias directive

関連する問題