結論から言うと、C#のInternalsVisibleToAttributeでは
- publicは従来通りにアクセス可能
- internalへのアクセスが可能になる
- private,protectedはアクセス不可
using System.Runtime.CompilerServices; [assembly: InternalsVisibleTo("ConsoleApp.Tests")]
上記のような指定をします。
本来アクセス出来ないものにアクセス出来るようになるのでユースケースとしてはテストコードかなと私は思ってます。
とはいえ、きちんとpublicとinternalの使い分けをしているプロジェクトはありますが、場合によってはinternalはあまり使われてないこともあります。
これがprivateまでアクセスできるなら、もっと使えると思うのは私だけですかね。
privateのメソッドをアクセスしたいなら、Reflectionを使うことになります。nameofも使えるのである程度、融通は利きますが、引数が変わるのには追従されないので、そこまでは私はやってませんね。