internal
C#のとprivate
アクセス修飾子の違いは何ですか?
7 に答える
internalはアセンブリスコープ用です(つまり、同じ.exeまたは.dll内のコードからのみアクセスできます)
privateはクラススコープ用です(つまり、同じクラスのコードからのみアクセスできます)。
以下の説明を見つけてください。詳細については、このリンクを確認してください -http://www.dotnetbull.com/2013/10/public-protected-private-internal-access-modifier-in-c.html
プライベート: -プライベートメンバーは、独自のタイプ(独自のクラス)内でのみアクセスできます。
内部: -内部メンバーは、継承(その派生型)またはクラスのインスタンスによってアセンブリ内でのみアクセスできます。
参照 :
dotnetbull-c#のアクセス修飾子とは
internal
メンバーは、宣言されているアセンブリ内のすべてのコードに表示されます。
(および[InternalsVisibleTo]
属性を使用して参照される他のアセンブリにも表示されます)
private
メンバーは、宣言しているクラスにのみ表示されます。(ネストされたクラスを含む)
外部(ネストされていない)クラスはprivate
、それをプライベートにするための包含スコープがないため、宣言できません。
聞き忘れた質問に答えるために、protected
メンバーはメンバーのようなものですprivate
が、宣言型を継承するすべてのクラスにも表示されます。(ただし、少なくとも現在のクラスのタイプの式でのみ)
プライベートメンバーは、クラスの本体または宣言された構造体内でのみアクセスできます。
内部タイプまたはメンバーは、同じアセンブリ内のファイル内でのみアクセスできます
private -class / scope / structect'のカプセル化。
internal-アセンブリでのカプセル化。
内部メンバーはアセンブリ内でアクセス可能です(同じプロジェクトでのみアクセス可能)
プライベートメンバーは同じクラス内でアクセス可能です
初心者のための例
ソリューションには2つのプロジェクト(Project1、Project2)があり、Project1にはProject2への参照があります。
- Project2で記述されたパブリックメソッドは、Project2とProject1でアクセスできます。
- Project2で記述された内部メソッドは、Project2でのみアクセスできますが、Project1ではアクセスできません。
- Project2のclass1で記述されたプライベートメソッドは、同じクラスにのみアクセスできます。プロジェクト1以外のプロジェクト2の他のクラスでもアクセスできません。
Internalを使用すると、たとえば、複数のビジネスロジッククラス間で(スレッドセーフのために)データアクセス静的クラスを参照できますが、接続プールでそのクラス/トリップを相互に継承するようにサブスクライブせず、最終的にDALクラスの許可を回避できます。パブリックレベルでのアクセスを促進するため。これには、設計とベストプラクティスに無数の裏付けがあります。
Entity Frameworkは、このタイプのアクセスをうまく利用しています