更新:この質問は、2014年9月に私のブログの主題でした。すばらしい質問をありがとう!
コンパイラチーム内でも、この問題についてはかなりの議論があります。
まず、ルールを理解するのが賢明です。クラスまたは構造体のパブリックメンバーは、包含型にアクセスできるすべてのユーザーがアクセスできるメンバーです。したがって、内部クラスのパブリックメンバーは事実上内部です。
では、内部クラスが与えられたら、アセンブリでアクセスしたいそのメンバーをパブリックまたは内部としてマークする必要がありますか?
私の意見は、そのようなメンバーをパブリックとしてマークすることです。
「このメンバーは実装の詳細ではない」という意味で「パブリック」を使用しています。保護されたメンバーは実装の詳細です。派生クラスを機能させるために必要なことは何かあります。内部メンバーは実装の詳細です。このアセンブリの内部で何かが正しく機能するためには、メンバーが必要です。パブリックメンバーは、「このメンバーは、このオブジェクトによって提供される主要な文書化された機能を表します」と述べています。
基本的に、私の態度は次のとおりです。この内部クラスをパブリッククラスにすることにしたとします。そのためには、クラスのアクセシビリティという1つだけを変更したいと思います。内部クラスをパブリッククラスにすると、内部メンバーもパブリックメンバーにする必要がある場合、そのメンバーはクラスのパブリックサーフェス領域の一部であり、そもそもパブリックである必要があります。
他の人は同意しません。メンバーの宣言をちらりと見て、内部コードからのみ呼び出されるかどうかをすぐに知りたいという条件があります。
残念ながら、これは常にうまくいくとは限りません。たとえば、内部インターフェイスを実装する内部クラスは、クラスのパブリックサーフェスの一部であるため、実装メンバーをパブリックとしてマークする必要があります。