2017-12-06 12 views
1

私はVS 2017 v15.5.0を使用しています。C#ネームスペース、フォルダ、コンパイラエラー

最小のコンソールプロジェクトCon_02があります。このプロジェクトのメインクラスのネームスペースは、単にCon_02(クラスは以下に示す)です。

このプロジェクトでは、Businessという名前の新しいフォルダを追加します。 Businessフォルダ内に、Employeeという名前のクラスを作成します。 Employeeクラスに対してVSによって生成されるデフォルトの名前空間はCon_02.Businessです。この名前空間を簡略化してBusinessにします。

メインクラスに戻ると、Employeeがインスタンス化されます。ここに私の完全なメインクラスです:

namespace Con_02 { 
    class Program { 
     Business.Employee e1 = new Business.Employee(); 

     private static void Main() { } 
    } 
} 

これまでのところ、とても良いです。すべてがコンパイルされます。

ここではBusinessフォルダに別のクラスCompanyを作成します。 VSは名前空間Con_02.Businessを生成します。

今や、メインのCon_02.Programクラスはコンパイルされなくなりました。

The type or namespace name 'Employee' does not exist in the namespace 'Con_02.Business' (are you missing an assembly reference?)

は私がなぜコンパイラを理解しようとしているように多くの問題を解決する方法を求めていないよ:具体的には、以前にうまくコンパイルされていたBusiness.Employeeオブジェクトの作成は、私のコンパイラエラーを与えますCon_02を基準にした名前空間を想定しているようです。

+3

そのため、名前空間の名前が重複しないようにする必要があります。 'global :: Business.Employee'を試してください – juharr

+0

上記のように' using Business'または 'global ::'を追加してください。しかし、このような名前空間を使用しない方がよいでしょう。 – Evk

答えて

0

はあなたProgramクラスの最上部に

using Business;

を追加します。

あなたの従業員のインスタンスからビジネスパートを削除します。

OR。すべてのクラスに同じ名前空間を使用します。

1

Companyクラスを含むCon_02.Businessという名前の新しい名前空間を作成するため、Business.EmployeeはCon_02.Business名前空間の下にあると見なされますが、Con_02.BusinessにはCompanyクラスだけが含まれます。

enter image description here

namespace Business 
{ 
    class Company 
    { 
    } 
} 

か、単に名前空間がクラスのみをグループ化についてです忘れないでくださいEmployee e1 = new Employee();

を使用する

namespace Con_02.Business 
{ 
    class Company 
    { 
    } 
} 

を変更することがベター。

+0

さて、私は何が起こっているのか、それを "修正"する方法を知っていますが、コンパイラーは従業員が会社と同じ名前空間になければならないと想定するのは奇妙に思えます。私はそれが気に入りません。 –

+0

Employee e1 = new Employee();を使用してください。次に –

関連する問題