前言
本文將介紹如何在其他程式集訪問internal類的方法
首先我們新建一個解決方案,其中同時新建兩個類庫FooALibray
和FooALibray
,如下:
其中FooA
類程式碼如下:
internal class FooA
{
public void Print()
{
Console.WriteLine($"I am {nameof(FooA)}");
}
}
然後我們在Program
類呼叫FooA
的Print
方法:
static void Main(string[] args)
{
var fooA = new FooALibrary.FooA();//報錯,FooA不可訪問,因為它具有一定的保護級別
fooA.Print();
}
那麼我們怎麼能夠訪問internal
級別的FooA
類呢?
InternalsVisibleToAttribute特性
首先,我們在專案FooALibray
新增->程式集資訊檔案,那麼就獲得一個初始的AssemblyInfo
類了,然後我們只需新增以下程式碼:
[assembly: InternalsVisibleTo("InternalsVisibleToAttributeSample")]
那麼,之前的那段程式碼能夠正常編譯則輸出:
I am FooA
擴充部分
假設FooBLibray
也要訪問FooA
,是否還要再加入對FooBLibray
程式集可見呢?答案是不用,還可以用以下方式:
將FooBLibray
程式集名稱改為InternalsVisibleToAttributeSample
public class FooB
{
public void PrintA()
{
new FooALibrary.FooA().Print();//編譯成功
}
}
該黑科技是林大佬告訴我的,嘿嘿~~
總結
我們合理的利用InternalsVisibleToAttribute
程式集可見特效能夠我們需要寫Demo或者單元測試要引用到internal
類的時候不去汙染(修改成public)就能夠訪問它,這個特性再日常的工作流程中還是非常的好用的