曾几何时须求挑战

 
 项目开销的长河中,调节和测量试验使用的只怕是最多的操作。任何代码写出来都亟需经过调节和测量检验和构成,以此扩展和进级程序的安定团结和可相信性。聊到.NET的单元测验,在此间就得提提.NET的友元程序集这一风味,也借用.NET实行单元测验的叁个相比好用的.NET属性,来教学一下程序集、定制Attribute的相干知识。一些知识要求反复的去尝尝和自省,不要以为你会了就概略,等您放在心上的时候,你就有个别敬敏不谢的意味了。

   生活在于不停的患难,只有通过训练,才可知哪天要求安分,曾几何时须要挑战。

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

一.程序集概述

 
本文重假如商讨“友元程序集”的一对文化,既然是做四个解析,那么就相应把一些学问做贰个张开来演说。在此间先谈谈程序集(有人感觉很领悟,有人感到完全不懂,意况各异,采纳不一样,需者自取吧),接下去我们具体的看看程序集这一性格。

 
程序集是一个或多少个模块/能源文件的逻辑分组,程序集是选取、安全性以及版本调节的比非常的小单元。对于程序集的布局有如下图。

公海赌船710 1

公海赌船710 2

   
对于程序集的组成就不一一做解析,在此地就独自谈谈元数据这一结构。元数据是三个二进制数据块,由一组数据表,元数据连接与分包IL代码的文本涉及,元数据由多少个表组成。元数据的机能有上图介绍。元数据的表有八个体系:定义表,引用表,清单表。对于这个表的构造在此间就不做牵线了,风野趣的能够查找一下,个人以为元数据这一布局应当好好的钻研一下。

二.定制Attribute概述

 
 下面的阐释中轻便的牵线了前后相继集的布局和元数据,在此处差相当少的介绍一下定制Attribute这一.NET的特色。定制Attribute允许定义的消息使用于大致每三个元数据表记录项,这种可增添的元数据音讯能在运转时查询,从而动态改造代码的实施格局。在C#种,为了将三个定制Attribute应用于三个对象成分,必要将Attribute放置于目的元素前面的一对方括号中。

公海赌船710, 
 CL奥迪Q5允许将定制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.Compiler瑟维斯s.InternalsVisibleToAttribute”/>
类的新实例。接收一个友元程序集的名目。

 
对于友元程序集有一个封锁,如果多个友元程序集是签订合同的,那么源程序集为了保险信任正确的代码,就要求钦命友元程序集的公钥。

四.总结

 
 对于本文首借使在介绍友元程序集这一本性,顺带介绍程序集和定制Attribute那多个天性,方便大家精通友元程序集这一风味。那篇文章希望对大家有所扶助,依然那句话,需者自取,也虚心接受讥讽。知识在于分享,更在于每一个人的思辨。

 

相关文章