web-dev-qa-db-ja.com

名前空間内でのみクラスを公開するためのC#アクセス修飾子

Javaでは、クラスがパッケージ内でのみ使用可能であることを保証するパッケージレベルの保護があります。

C#の名前空間は、ほぼパッケージのように機能します。ただし、C#には、名前空間内のクラスを保護するための保護レベルがありません。

これには特定の理由がありますか?

40
Jaco

そのようなアクセス修飾子はありません。最も近い修飾子はinternalですが、保護の単位は、名前空間ではなく、クラスが存在するアセンブリです。

どちらの種類の制限も部外者がライブラリの実装の詳細にアクセスできないようにするため、internalを使用して同様のレベルの制御を実現することが可能であると主張することができます。それが違いを生む唯一の人はあなたであり、図書館の作家であり、あなたはとにかく何を公開し、何を隠すべきかを完全にコントロールしています。基本的に、名前空間の外でクラスを使用したくない場合は、単に使用を控えることを意味します。クラスがinternalの場合、他の誰もそのクラスを使用できません。

20
dasblinkenlight

.NETにはアセンブリ(dllまたはexeファイル)があり、internal修飾子を使用して同じアセンブリ内でのみアクセスを制限できます。

3

これには特定の理由がありますか?

主に、いくつかのキーがあるためです パッケージと名前空間の違い

リンクされた質問とここですでに述べられていることを簡単にするために:C#の名前空間は、主に内部および外部の両方でアセンブリのコンテンツを整理するのに役立ちます。 JavaパッケージにはC#アセンブリとの共通点が多く、C#にはアセンブリレベルに制限するアクセス修飾子があります: 内部

1
User