DotNet友元程序集解析爱博体育app

 
 项目支付的长河中,调节和测验使用的恐怕是最多的操作。任何代码写出来都亟待经过调节和测验和组合,以此扩充和升高程序的安身立命和可信性。聊起.NET的单元测量试验,在这里就得提提.NET的友元程序集这一风味,也借用.NET实行单元测量试验的叁个较为好用的.NET属性,来教学一下程序集、定制Attribute的连锁文化。一些学问要求频仍的去品尝和反思,不要认为您会了就大体,等你注意的时候,你就有些心有余而力不足的情致了。

   生活在于不停的折腾,唯有经过演练,才可见哪一天须求安分,曾几何时必要挑衅。

   毒鸡汤喝完了,来聊聊正事…

一.程序集概述

 
本文重要是座谈“友元程序集”的一对文化,既然是做二个解析,那么就相应把一些学问做四个人作品张开来解说。在此间先谈谈程序集(有人感到很了然,有人觉得完全不懂,景况各异,选用不一样,需者自取吧),接下去我们具体的看看程序集这一天性。

 
程序集是一个或两个模块/能源文件的逻辑分组,程序集是录取、安全性以及版本调整的十分小单元。对于程序集的结构有如下图。

爱博体育app 1

爱博体育app 2

   
对于程序集的组成就不一一做深入分析,在此间就独自谈谈元数据这一结构。元数据是贰个二进制数据块,由一组数据表,元数据连接与饱含IL代码的文本涉及,元数据由多少个表组成。元数据的功力有上海教室介绍。元数据的表有四个体系:定义表,援用表,清单表。对于那些表的构造在此间就不做牵线了,风乐趣的能够查找一下,个人感到元数据这一布局应当能够的研商一下。

二.定制Attribute概述

 
 上边的阐发中轻便的介绍了程序集的结交涉元数据,在这里大约的牵线一下定制Attribute这一.NET的风味。定制Attribute允许定义的新闻使用于大致每二个元数据表记录项,这种可扩张的元数据新闻能在运作时查询,进而动态改动代码的实行办法。在C#种,为了将叁个定制Attribute应用于一个对象成分,须要将Attribute放置于目的成分前边的一对方括号中。

 
 CLWrangler允许将定制Attribute应用于可在文件的元数据中象征的大概全体因素。定制Attribute重要使用于程序集、模块、类型、字段、方法、方法参数、方法再次回到值、属性、事件、泛型类型参数。attribute是类的三个实例,将八个attribute应用于二个目的成分时,语法类似于调用类的某部实例构造函数。定制Attribute的实譬喻下:

[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true, Inherited = false)]

   
上面代码取自InternalsVisibleToAttribute类中,该类是实现友元程序集天性的宗旨目的,上面会做三个现实的牵线。AttributeUsage需求承受三个AttributeTargets枚举类型的值作为参数,称之为定位参数,是强制性的,必须钦赐。AllowMultiple参数用于获取或安装二个布尔值,提醒是或不是有四个实例钦定的习性可认为单个程序成分钦点。Inherited参数用于获取或安装三个布尔值,提示钦定的属性是或不是足以承继由派生类和重写成员。

 
 定制Attribute能够使用于单个目的成分,定制Attribute的次第是无所谓的。在C#种,可将各个Attribute都密封到一对方括号中,也能够在部分方括号中查封五个以逗号分隔的Attribute。

 
 定制Attribute便是一个类的实例,它被种类化成驻留在元数据中的一个字节流,在运转时,能够对元数据中隐含的字节举行反体系化,从而构造类的贰个实例。

三.友元程序集深入分析

 
 扯了半天,终于到教师“友元程序集”那三个概念,“友元程序集”在.NET第22中学提议,使用InternalsVisibleToAttribute来贯彻这一特点,InternalsVisibleTo只可以用来程序集,况兼你能够在同三个先后集种应用数次。源程序集:包括这特性格的顺序集。友元程序集能够看出源程序集的享有内部成员,类似于国有的。

   友元程序集实例介绍:

//AssemblySource.DLL
[assembly: InternalsVisibleTo(DotNetShare)]
public class AssemblySource
{
    public static void Share();
}


//DotNetShare.DLL
public class DotNetShare
{
    private static void Main()
    {
        AssemblySource.Share();
    }
}

   
AssemblySource.DLL和DotNetShare.DLL之间存在一种奇特的关系,不过这种关联只能单项操作。接下来看一下InternalsVisibleToAttribute的落到实处源码。InternalsVisibleToAttribute传承自Attribute类,该类钦定平时仅在方今程序集中可知的档期的顺序对点名程序集可知。该类包蕴多少个属性和三个方法。

   1.AssemblyName

public string AssemblyName
    {
      [__DynamicallyInvokable] get
      {
        return this._assemblyName;
      }
    }

 
 该属性为二个只读属性,三个意味友元程序集名称的字符串。该属性用于获取友元程序集的名目,采用internal 关键字标识的全体项目和花色成员对该程序集均为可知。

  2.InternalsVisibleToAttribute()

public InternalsVisibleToAttribute(string assemblyName)
    {
      this._assemblyName = assemblyName;
    }

   该措施为四个构造函数,用钦点的友元程序集的名目开始化 <see
cref=”T:System.Runtime.CompilerServices.InternalsVisibleToAttribute”/>
类的新实例。接收三个友元程序集的称号。

 
对于友元程序集有多个束缚,假使叁个友元程序集是签订契约的,那么源程序集为了保障信任精确的代码,就供给钦点友元程序集的公钥。

四.总结

 
 对于本文主如若在介绍友元程序集这一风味,顺带介绍程序集和定制Attribute这两日性状,方便我们精通友元程序集这一特征。那篇小说希望对我们全部支持,依旧那句话,需者自取,也虚心接受嘲弄。知识在于分享,更在于每一位的思量。

 

相关文章