web-dev-qa-db-ja.com

内部アクセス制限とプライベートアクセス制限

C#のinternalおよびprivateアクセス修飾子の違いは何ですか?

369
Jim Fell

internalはアセンブリスコープです(つまり、同じ.exeまたは.dll内のコードからのみアクセス可能)。

privateはクラススコープのためのものです(すなわち、同じクラスのコードからのみアクセス可能です)。

487
explorer

以下の説明を見つけてください。あなたはより多くの詳細についてこのリンクをチェックすることができます - http://www.dotnetbull.com/2013/10/public-protected-private-internal-access-modifier-in-c.html

非公開: - 非公開メンバーは自分の型(Ownクラス)内でのみアクセス可能です。

Internal: - 内部メンバーは、継承(派生型)またはクラスのインスタンスによってアセンブリ内でのみアクセス可能です。

enter image description here

参照:

dotnetbull - c#のアクセス修飾子とは何ですか

194
Vivek

internalメンバーは、宣言されているアセンブリ内のすべてのコードに表示されます。
(そして [InternalsVisibleTo]属性 を使って参照される他のアセンブリへ)

privateメンバーは、宣言しているクラスからしか見えません。 (ネストしたクラスを含む)

外部(ネストしていない)クラスは、プライベートにするための包含スコープがないため、privateと宣言することはできません。

忘れた質問に答えるために、protectedメンバーはprivateメンバーに似ていますが、宣言型を継承するすべてのクラスにも表示されます。 (ただし、少なくとも現在のクラスの型の式についてのみ)

67
SLaks

Privateメンバーは、クラスの本体または宣言されている構造体内でのみアクセスできます。

内部タイプまたはメンバーは、同じアセンブリ内のファイル内でのみアクセスできます。

6

private - クラス/スコープ/構造体のカプセル化。

internal - アセンブリ内のカプセル化.

6
Yaniv Lugassy

Internalを使用すると、複数のビジネスロジッククラス間で(スレッドセーフのために)Data Access静的クラスを参照しながら、それらを継承して接続プールでそのクラスを継承したり、DALクラスを許可しないようにすることができます。公共レベルでのアクセスを促進する。これはデザインとベストプラクティスにおいて無数の裏付けがあります。

Entity Frameworkはこのタイプのアクセスを有効に利用します。

3
Nathan Teague