C#での内部とパブリック


92

publicinternal可視性修飾子の違いを知りたい。

internalクラスでいつ使用する必要がありpublicますか?私は方法があるべきときに混乱していますpublicinternal

internalアセンブリからアクセスできることを読みましたがpublic、違いがあるアセンブリからも使用できます。

回答:


101

public どこからでも見える。

internal アセンブリ内でのみ表示されます

内部APIを保護する目的でのみ内部を使用する傾向があります。たとえば、メソッドのいくつかのオーバーロードを公開できます。

public int Add(int x, int y)
public int Add(int x,int y, int z)

どちらも内部メソッドを呼び出します

internal int Add(int[] numbers)

その後、メソッドに高度な機能を追加できますが、プログラマーがメソッドを正しく呼び出すのに役立つファサードメソッドを使用して、メソッドを「保護」できます。(たとえば、配列パラメーターを使用した実装メソッドには、値の任意の制限がある場合があります。)

また、Reflectionを使用すると、可視性に関係なく、すべてのメソッドを呼び出すことができます。内部的に隠されたAPIへのアクセスを制御/獲得するためのもう1つの「ハッキング」。


5
内部クラスでパブリックメソッドを宣言できます。
NoviceToDotNet 2010年

いいえ、これにより競合が発生します。コンパイラーはこれを通知し、コンパイルに失敗します。
Program.X 2010年

14
@ Program.X:実際にはできますし、コンパイラーは何も教えません。
またはMapper

これが実際に機能であるかどうかにかかわらず、私は実際にここに来ました。クラスinternalとすべてのメソッドを作成することを想像してくださいpublic。より高い可視性が必要な場合は、クラス全体をpublic再度設定できます。しかし、このように使用することを意図しているかどうかはわかりません。グーグル...続ける私はそう編集:ほら、同じトピックstackoverflow.com/questions/9302236/...
ecth

31

internalDLLの外ではなくDLLの内部でメンバーまたは型を宣言する場合に便利です...
通常、Public他のDLLからアクセスできるようにメンバーを宣言する場合。ただし、クラスライブラリ内で公開するものを宣言する必要がある場合は、として宣言できますInternal
正式な定義:内部メンバーは現在のアセンブリのすぐ内側に表示されます...


11

internal単体テストを作成するときにも役立ちます。InternalsVisibleTo属性は、アセンブリコード内のテストアセンブリのアクセス内部メソッドましょう。つまり、リフレクションを使用せずに、外の世界にプライベートに見えるメソッドをテストできます。


6

パブリックは、アセンブリの外部からもアクセスできます。したがって、アクセスしてはならないクラスがある場合、アセンブリ内のすべてのクラスがアクセスできるはずです。内部は適切です。外部アクセスが必要な場合は、publicを使用します。


4

また、マークされたプロパティは、WPFのDataBindingに使用されinternalBindingExpression path error場合にスローされます。したがってpublic、DataBindingが同じアセンブリ内で行われる場合でも、これらは正しく機能する必要があります。


-3

外部からアセンブルを参照できる場合、内部クラスとパブリッククラスのスコープがあります

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.