14

私は C# を学んでおり、Java の世界から来ました。C# には「パッケージ プライベート」がないことに少し戸惑いました。これに関して私が見たほとんどのコメントは、「あなたにはできない。言語はこのように設計されていない」というものです。また、これらの回避策が言語の設計に反するというコメントとともに、internalいくつかの回避策も見ました。partial

C# がこのように設計されたのはなぜですか? また、次のようなことを行うにはどうすればよいですか:ProductクラスとProductInstanceクラスがあります。を作成する唯一の方法は、クラスProductInstanceのファクトリ メソッドを使用することです。Java では、と同じパッケージをProduct入れますが、そのコンストラクターを作成して、そのパッケージにのみアクセスできるようにします。このように、 を作成したい人は、クラスのファクトリ メソッドを介してのみ作成できます。C# で同じことを達成するにはどうすればよいですか?ProductInstanceProductpackage privateProductProductInstanceProduct

4

2 に答える 2

32

internalあなたが求めているものです。これは、メンバーが同じアセンブリ内の任意のクラスからアクセスできることを意味します。この目的 (Product および ProductInstance) で使用することに問題はなく、設計された目的の 1 つです。C# は名前空間を重要なものにしないことを選択しました。名前空間は整理のために使用され、パッケージ privateを使用した java のように、どの型が互いに認識できるかを決定するために使用されません。

partialinternal または のようなものではありませんpackage private。これは単に、クラスの実装を複数のファイルに分割し、適切な手段としていくつかの拡張オプションを挿入する方法です。

于 2011-02-11T01:59:33.527 に答える
9

パッケージは、実際には Java の場合と同じようには存在しません。名前空間は、コードを整理して名前の競合を防ぐために使用されますが、アクセス制御には使用されません。プロジェクト/アセンブリはアクセス制御に使用できますが、パッケージのようにプロジェクト/アセンブリをネストすることはできません。

internalあるプロジェクトのメンバーを別のプロジェクトから非表示にするために使用します。

于 2011-02-11T02:02:28.260 に答える