在其他程序集访问internal类
前言
本文将介绍如何在其他程序集访问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