今回はC#のクラスライブラリについてです。
特定の機能を外部から呼び出せるようにまとめたもので、dllとして出力されます。
TestLibというクラスライブラリプロジェクトを作成してTest1クラスを公開するのであれば下記のようになります。
namespace TestLib { public class Test1 { public int Value { get; set; } } }
これを別のプロジェクトから参照するには、
参照にTestLib.dllを追加すれば、下記のようにして使用できます。
namespace Sample { class Program { static void Main(string[] args) { var test1 = new TestLib.Test1(); } } }
さてここからが本題ですが、TestLibのほうに下記のようにinternalクラスがあるとします。
namespace TestLib { internal class Test2 { public int Value { get; set; } } }
internalは同じアセンブリ内からしかアクセスできないので、
別プロジェクトからは参照できません。
ただ、場合によっては外部に参照させたいこともあると思います。
そんな時はdll側のアセンブリ情報ファイルに下記のように、参照させたいプロジェクト名を記載することでpublicと同様に参照可能にすることができます。
Properties/AssemblyInfo.cs
[assembly: InternalsVisibleTo("Sample")]
今回はSampleというプロジェクトにinternalアクセスを参照させたいため、
InternalsVisibleTo でSample を指定します。
これで下記のようにinternalクラスもアクセス可能になりました。
namespace Sample { class Program { static void Main(string[] args) { var test2 = new TestLib.Test2(); } } }