内部とプライベートのアクセス修飾子


回答:


516

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

privateはクラススコープ用です(つまり、同じクラスのコードからのみアクセスできます)。


6
簡単な質問があります。アセンブリ内のクラスと内部のクラスの名前空間でクラスをプライベートとして宣言すると、どちらの場合もアセンブリ内のそのクラスにアクセスできます。プライベートクラスと内部クラスの違いは何ですか。またはクラス内のクラスをネストするときに使用されるクラスの観点からプライベート修飾子と内部修飾子はありますか?
Mayotic 2012

2
特定のプロジェクト/アセンブリを別のプロジェクトの参照として追加し、プライベートと内部の両方が名前空間内のこの特定のクラスにアクセスできないようにしたので、もう一度...プライベートクラスと内部クラスの違いは?感謝
Mayotic 2012

9
トップレベルのクラスをプライベートとして宣言することはできません。コンパイラーが停止します。
TheGateKeeper 2012

6
@NetSkay:プライベートクラスをパブリッククラス内で宣言すると、このクラスはアセンブリ内の他のクラスからアクセスできなくなりますが、このクラスを内部として宣言すると、アセンブリ内でアクセスできます。ただし、アセンブリの外部からは両方にアクセスできません。
Yogesh Jindal

2
VB.NETのバックグラウンドを使用している場合、C#の「internal」キーワードはVB.NETの「Friend」キーワードと同等です。
Brain2000 14

207

以下の説明をご覧ください。詳細については、このリンクを確認でき ます-http://www.dotnetbull.com/2013/10/public-protected-private-internal-access-modifier-in-c.html

プライベート: -プライベートメンバーは、自身のタイプ(所有クラス)内でのみアクセスできます。

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

ここに画像の説明を入力してください

参照 :

dotnetbull-C#のアクセス修飾子とは


17
それProtected Internalよりも広いアクセスを提供する興味深いものProtected
Dan Bechard 2016年

9
@ダン、完全に同意します。読み、考えるために役立つかもしれないprotected internalとしてprotected OR internal
チェスフナード2016

7
どういうWith Type意味ですか?
James Wierzba、2017年

@Danええ、私はそれが真理値表として機能し、ANDその行列がtrue | false | false | false になると想定しましたprotected internal。直感的ではありません。代わりに、true | true | true | falseのようになりOR'dます。
FERR

1
ちなみに、C#7.2は「保護されたAND内部」修飾子を追加したばかりですが、実際に選択されたキーワードprivate protectedはあまり直観的ではありません。詳しくは:docs.microsoft.com/en-us/dotnet/csharp/language-reference/...
ジョー・シーウェル

70

internalメンバーは、それらが宣言されているアセンブリ内のすべてのコードから見ることができます
(また、[InternalsVisibleTo]属性を使用して参照される他のアセンブリからも見えます)。

privateメンバーは、宣言するクラスにのみ表示されます。(ネストされたクラスを含む)

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

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



6

プライベートメンバーは、クラスの本体またはそれらが宣言されている構造体内でのみアクセスできます。

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


これを使用することの違いは何ですか?まだ
わかり

4
プライベートはクラス内からのみアクセスでき、内部はアセンブリ内からアクセスできます(VSのプロジェクト、つまりdll / exeファイル)。
Jesper Fyhr Knudsen、

3

内部では、たとえば、複数のビジネスロジッククラス間で(スレッドセーフのための)データアクセス静的クラスを参照しながら、それらをサブスクライブせずに、接続プールで相互にそのクラス/トリップを継承し、DALクラスの許可を回避できます。公共レベルでのアクセスを促進する。これには、設計とベストプラクティスにおいて無数の裏付けがあります。

Entity Frameworkはこのタイプのアクセスをうまく利用しています


0

内部メンバーはアセンブリ内でアクセス可能(同じプロジェクトでのみアクセス可能)

プライベートメンバーは同じクラス内でアクセス可能

初心者向けの例

ソリューションには2つのプロジェクト(Project1、Project2)があり、Project1はProject2への参照を持っています。

  • Project2で作成されたパブリックメソッドは、Project2およびProject1でアクセス可能になります
  • Project2で記述された内部メソッドはProject2でのみアクセス可能で、Project1ではアクセスできません
  • Project2のclass1で記述されたプライベートメソッドは、同じクラスにのみアクセスできます。プロジェクト1ではなく、プロジェクト2の他のクラスでもアクセスできません。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.