何时供给挑衅

 
 项目支付的过程中,调试使用的恐怕是最多的操作。任何代码写出来都急需通过调节和测验和重组,以此扩大和进级换代程序的安静和可信性。谈起.NET的单元测验,在这里就得提提.NET的友元程序集这一特点,也借用.NET实行单元测验的四个相比较好用的.NET属性,来上课一下程序集、定制Attribute的连带文化。一些学问须要频仍的去品尝和反思,不要感觉您会了就大体,等你注意的时候,你就有个别爱莫能助的情趣了。

   生活在于不停的折磨,唯有经过演习,才可见什么时候必要安分,何时必要挑衅。

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

一.程序集概述

 
本文首借使座谈“友元程序集”的片段知识,既然是做贰个解析,那么就应该把有些学问做二个进行来阐释。在那边先谈谈程序集(有人认为很驾驭,有人感到完全不懂,情状分裂,选用不一致,需者自取吧),接下去大家现实的探视程序集这一特征。

 
程序集是多少个或七个模块/财富文件的逻辑分组,程序集是援引、安全性以及版本调整的小不点儿单元。对于程序集的构造有如下图。

图片 1

图片 2

   
对于程序集的组成就不一一做深入分析,在这里就独自谈谈元数据这一协会。元数据是多个二进制数据块,由一组数据表,元数据连接与饱含IL代码的文件涉及,元数据由多少个表组成。元数据的功效有上海体育场合介绍。元数据的表有三个品种:定义表,引用表,清单表。对于那一个表的布局在那边就不做牵线了,有乐趣的能够找寻一下,个人认为元数据这一构造应当能够的切磋一下。

二.定制Attribute概述

 
 上边包车型客车阐述中简易的牵线了先后集的协会和元数据,在此地质大学约的牵线一下定制Attribute这一.NET的表征。定制Attribute允许定义的消息应用于大约每二个元数据表记录项,这种可扩展的元数据音信能在运营时查询,进而动态退换代码的奉行措施。在C#种,为了将一个定制Attribute应用于八个对象成分,要求将Attribute放置于指标成分前面包车型大巴一对方括号中。

 
 CL酷威允许将定制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这两特性状,方便咱们精晓友元程序集这一特征。这篇小说希望对大家具有帮衬,如故那句话,需者自取,也虚心接受嘲讽。知识在于分享,更在乎每壹人的思索。