今回は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();
}
}
}
