より良いエンジニアを目指して

1日1つ。良くなる!上手くなる!

InternalsVisibleToAttributeでinternalメソッドへのアクセスを可能にする

結論から言うと、C#のInternalsVisibleToAttributeでは

  • publicは従来通りにアクセス可能
  • internalへのアクセスが可能になる
  • private,protectedはアクセス不可

f:id:rimever:20210216193157p:plain
通常、internal,private,protectedメソッドはアクセスできない。

using System.Runtime.CompilerServices;
[assembly: InternalsVisibleTo("ConsoleApp.Tests")]

上記のような指定をします。

f:id:rimever:20210216193241p:plain
InternalsVisibleToの指定でinternalメソッドがアクセスできるようになった。

本来アクセス出来ないものにアクセス出来るようになるのでユースケースとしてはテストコードかなと私は思ってます。

とはいえ、きちんとpublicとinternalの使い分けをしているプロジェクトはありますが、場合によってはinternalはあまり使われてないこともあります。

これがprivateまでアクセスできるなら、もっと使えると思うのは私だけですかね。

privateのメソッドをアクセスしたいなら、Reflectionを使うことになります。nameofも使えるのである程度、融通は利きますが、引数が変わるのには追従されないので、そこまでは私はやってませんね。

github.com