有的知识必要反复的去尝尝和自省

 
 项目开荒的经过中,调节和测试使用的或是是最多的操作。任何代码写出来都须求通过调节和测试和组合,以此扩张和进步程序的安宁和可信性。聊起.NET的单元测试,在那边就得提提.NET的友元程序集这壹特色,也借用.NET举办单元测试的二个相比较好用的.NET属性,来说课一下程序集、定制Attribute的连锁文化。一些文化需求反复的去尝试和反省,不要感觉你会了就忽略,等您放在心上的时候,你就某些力不从心的乐趣了。

   生活在于不停的折腾,唯有经过练习,才可见什么日期供给安分,什么时候须求挑衅。

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

壹.程序集概述

 
本文重倘若钻探“友元程序集”的片段学问,既然是做多个深入分析,那么就应该把一部分文化做几个举办来阐释。在那边先谈谈程序集(有人以为很精晓,有人感到完全不懂,境况差别,选拔不一致,需者自取吧),接下去我们切实的探视程序集这一特征。

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

图片 1

图片 2

   
对于程序集的组成就不一1做剖析,在此处就独自谈谈元数据那1协会。元数据是一个2进制数据块,由1组数据表,元数据连接与富含IL代码的公文涉及,元数据由几个表组成。元数据的效用有上图介绍。元数据的表有四个品种:定义表,引用表,清单表。对于这么些表的组织在这里就不做牵线了,有意思味的能够寻觅一下,个人以为元数据那一构造应当好好的研究一下。

二.定制Attribute概述

 
 上边的论述中简易的牵线了先后集的构造和元数据,在那边大约的介绍一下定制Attribute那一.NET的风味。定制Attribute允许定义的音讯应用于大概每多个元数据表记录项,这种可扩充的元数据新闻能在运行时查询,从而动态更动代码的进行措施。在C#种,为了将三个定制Attribute应用于二个对象成分,需求将Attribute放置于指标成分前面包车型大巴一对方括号中。

 
 CL福睿斯允许将定制Attribute应用于可在文书的元数据中意味着的差不多具有因素。定制Attribute重要运用于程序集、模块、类型、字段、方法、方法参数、方法重临值、属性、事件、泛型类型参数。attribute是类的3个实例,将八个attribute应用于二个对象成分时,语法类似于调用类的某部实例构造函数。定制Attribute的实比如下:

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

   
下面代码取自InternalsVisibleToAttribute类中,该类是到位友元程序集性子的基本指标,上边会做三个有血有肉的介绍。AttributeUsage须求经受2个AttributeTargets枚举类型的值作为参数,称之为定位参数,是强制性的,必须内定。AllowMultiple参数用于获取或设置三个布尔值,提醒是或不是有三个实例钦定的特性可感到单个程序成分内定。Inherited参数用于获取或安装三个布尔值,提醒钦赐的品质是或不是足以继续由派生类和重写成员。

 
 定制Attribute能够动用于单个目的成分,定制Attribute的逐条是不值一提的。在C#种,可将每种Attribute都封闭到一对方括号中,也足以在一些方括号中查封多少个以逗号分隔的Attribute。

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

三.友元程序集深入分析

 
 扯了半天,终于到教学“友元程序集”这叁个定义,“友元程序集”在.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之间存在1种新鲜的关系,但是这种关联只可以单项操作。接下来看一下InternalsVisibleToAttribute的落到实处源码。InternalsVisibleToAttribute承袭自Attribute类,该类内定日常仅在近些日子先后集中可知的等级次序对点名程序集可知。该类蕴含两本性子和一个方法。

   1.AssemblyName

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

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

  2.InternalsVisibleToAttribute()

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

   该形式为二个构造函数,用钦定的友元程序集的名号早先化 <see
cref=”T:System.Runtime.CompilerServices.InternalsVisibleToAttribute”/>
类的新实例。接收一个友元程序集的称呼。

 
对于友元程序集有一个羁绊,假诺3个友元程序集是签订契约的,那么源程序集为了保证信任精确的代码,就供给钦点友元程序集的公钥。

四.总结

 
 对于本文首要是在介绍友元程序集这一表征,顺带介绍程序集和定制Attribute那多少个特色,方便大家知道友元程序集这一特征。那篇小说希望对大家具备支持,依然那句话,需者自取,也虚心接受嘲笑。知识在于分享,更在乎每一个人的考虑。