在其他程序集訪問internal類


前言

 本文將介紹如何在其他程序集訪問internal類的方法
首先我們新建一個解決方案,其中同時新建兩個類庫FooALibrayFooALibray,如下:

其中FooA類代碼如下:

   internal class FooA
    {
        public void Print()
        {
            Console.WriteLine($"I am {nameof(FooA)}");
        }
    }

然后我們在Program類調用FooAPrint方法:

   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)就能夠訪問它,這個特性再日常的工作流程中還是非常的好用的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM