web-dev-qa-db-ja.com

C#の名前空間とJavaのパッケージの違い

C#の名前空間とJavaのパッケージの違い(使用の点)は何ですか?

90
Mazzy

From: http://www.javacamp.org/javavscsharp/namespace.html


Java

パッケージは、タイプの競合を避けるためにファイルまたはパブリックタイプを整理するために使用されます。パッケージ構造は、ファイルシステムにマップできます。

system.security.cryptography.AsymmetricAlgorithm aa;

置き換えることができます:

import system.security.Crypography; 
class xxx { ...
AsymmetricAlgorithm aa;

パッケージのエイリアスはありません。特定のタイプに言及するには、importステートメントまたは完全修飾名を使用する必要があります。

package n1.n2;
    class A {}
    class B {}

または

package n1.n2;
   class A {}

別のソースファイル:

package n1.n2;
   class B {}

パッケージはネストできません。 1つのソースファイルに含めることができるパッケージステートメントは1つだけです。

C#

名前空間は、プログラムの「内部」組織システムと「外部」組織システムの両方として、プログラムを編成するために使用されます。

System.Security.Cryptography.AsymmetricAlgorithm aa;

置き換えることができます:

using System.Security.Crypography; 
AsymmetricAlgorithm aa;

あるいは、名前空間のエイリアスを指定することもできます。たとえば

using myAlias = System.Security.Crypography; 

そして、クラスを参照します

myAlias.AsymmetricAlgorithm 

namespace N1.N2
{
    class A {}
    class B {}
}

または

namespace N1
{
    namespace N2
    {
        class A {}
        class B {}
    }
}
69

異なる詳細がいくつかあります。

Javaでは、ディレクトリ構造はパッケージ構造と一致する必要があります。 C#にはそのような制限はありません。

C#では、1つのファイルに複数の名前空間を含めることができます。 Javaでは、1つのファイルが1つのパッケージに属します(前を参照)。

Javaにはデフォルト/パッケージのアクセシビリティがあります。 C#の内部アクセシビリティはアセンブリに組み込まれています。

VSとEclipseを使用してプロジェクトを構造化すると、違いはあまり感じられません。

40
Acaz Souza

Javaには「名前空間」という用語はありません-パッケージactsはJavaの名前空間として、名前のスコープを提供するという点で。また、アクセシビリティモデルの一部です。

Java言語仕様のセクション7 から:

プログラムはパッケージのセットとして編成されます。各パッケージには型の名前の独自のセットがあり、名前の競合を防ぐのに役立ちます。トップレベルの型は、その型がパブリックとして宣言されている場合にのみ宣言するパッケージの外部からアクセス可能です(§6.6)。

編集:さて、説明後:JavaパッケージはC#名前空間に対してsimilarです-アクセシビリティに影響することを除いて、C#の名前空間とアクセシビリティは完全に直交しています。

33
Jon Skeet

C++/C#では、名前空間は名前を分割するために使用され、異なる場所の変数に誤って同じ名前を使用して衝突を回避します。

Javaでは、パッケージはそれ以上のものです-パッケージはモジュールに使用され、命名の側面はその一部にすぎません。

11
kba

Javaでは、パッケージに影響を与えるさまざまなアクセス指定子をクラスに適用できます。

protected:同じパッケージと別のパッケージのサブクラスにアクセス可能、default:同じパッケージにアクセス可能、public:普遍的にアクセス可能、private:同じパッケージからもアクセスできない.

これらのタイプのアクセス指定子は、c sharpのネームスペースには適用されません。

0
dasumohan89