zoukankan      html  css  js  c++  java
  • 在其他程序集访问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)就能够访问它,这个特性再日常的工作流程中还是非常的好用的

  • 相关阅读:
    09安装运行redis-trib.rb所需的环境
    08Redis入门指南笔记(集群)
    win10 64位安装memcache扩展和开启redis扩展
    ubuntu 安装 lamp 和配置虚拟机
    Ubuntu 安装phpmyadmin 和配置
    ubuntu的 mysql 存储目录迁移
    ubuntu16.04安装php5
    PHP文件操作功能函数大全
    PHP 通用检测函数集
    PHP文件操作的经典案例
  • 原文地址:https://www.cnblogs.com/ryzen/p/14787171.html
Copyright © 2011-2022 走看看