在其他程序集访问internal类

  • A+
所属分类:.NET技术
摘要

 本文将介绍如何在其他程序集访问internal类的方法
首先我们新建一个解决方案,其中同时新建两个类库FooALibray和FooALibray,如下:


前言

 本文将介绍如何在其他程序集访问internal类的方法
首先我们新建一个解决方案,其中同时新建两个类库FooALibrayFooALibray,如下:

在其他程序集访问internal类

其中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程序集可见呢?答案是不用,还可以用以下方式:

在其他程序集访问internal类

FooBLibray程序集名称改为InternalsVisibleToAttributeSample

   public class FooB     {         public void PrintA()         {             new FooALibrary.FooA().Print();//编译成功         }     } 

该黑科技是林大佬告诉我的,嘿嘿~~

总结

 我们合理的利用InternalsVisibleToAttribute程序集可见特性能够我们需要写Demo或者单元测试要引用到internal类的时候不去污染(修改成public)就能够访问它,这个特性再日常的工作流程中还是非常的好用的