在其他程序集访问internal类

前言#

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

其中FooA类代码如下:

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

然后我们在Program类调用FooAPrint方法:

Copy
static void Main(string[] args) { var fooA = new FooALibrary.FooA();//报错,FooA不可访问,因为它具有一定的保护级别 fooA.Print(); }

那么我们怎么能够访问internal级别的FooA类呢?

InternalsVisibleToAttribute特性#

 首先,我们在项目FooALibray新增->程序集信息文件,那么就获得一个初始的AssemblyInfo类了,然后我们只需新增以下代码:

Copy
[assembly: InternalsVisibleTo("InternalsVisibleToAttributeSample")]

那么,之前的那段代码能够正常编译则输出:

Copy
I am FooA

拓展部分#

 假设FooBLibray也要访问FooA,是否还要再加入对FooBLibray程序集可见呢?答案是不用,还可以用以下方式:

FooBLibray程序集名称改为InternalsVisibleToAttributeSample

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

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

总结#

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

posted @   RyzenAdorer  阅读(841)  评论(3编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示
CONTENTS