部分文化供给频仍的去品尝和反思

 
 项目开销的经过中,调节和测量试验使用的可能是最多的操作。任何代码写出来都亟需经过调试和重组,以此增加和升级程序的稳固性和可信性。聊到.NET的单元测验,在那边就得提提.NET的友元程序集这一性子,也借用.NET实行单元测量试验的八个相比较好用的.NET属性,来教学一下程序集、定制Attribute的连带知识。一些学问必要频仍的去尝试和反思,不要感到您会了就大体,等你注意的时候,你就有些无计可施的情趣了。

   生活在于不停的煎熬,唯有通过磨炼,才可知曾几何时须要安分,几时供给挑衅。

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

一.程序集概述

 
本文主假使座谈“友元程序集”的有个别文化,既然是做一个深入分析,那么就活该把一部分学问做二个举行来演说。在这里先谈谈程序集(有人以为很理解,有人以为完全不懂,意况不一,选取不一致,需者自取吧),接下去我们切实的看看程序集这一表征。

 
程序集是贰个或多少个模块/能源文件的逻辑分组,程序集是重用、安全性以及版本调整的小不点儿单元。对于程序集的协会有如下图。

图片 1

图片 2

   
对于程序集的组成就不一一做剖判,在此处就独自谈谈元数据这一布局。元数据是叁个二进制数据块,由一组数据表,元数据连接与分包IL代码的文书涉及,元数据由多少个表组成。元数据的功效有上海图书馆介绍。元数据的表有多个类型:定义表,引用表,清单表。对于这个表的结构在这里就不做牵线了,风乐趣的能够搜索一下,个人认为元数据这一协会应该能够的钻研一下。

二.定制Attribute概述

 
 上面包车型客车演讲中轻便的介绍了程序集的协会和元数据,在那边大约的牵线一下定制Attribute这一.NET的特色。定制Attribute允许定义的新闻使用于大约每二个元数据表记录项,这种可扩张的元数据音信能在运转时查询,进而动态改换代码的推行情势。在C#种,为了将叁个定制Attribute应用于多个对象成分,须求将Attribute放置于指标成分前面的一对方括号中。

 
 CLENVISION允许将定制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这两脾本性,方便大家明白友元程序集这一表征。那篇作品希望对大家有着支持,仍旧那句话,需者自取,也虚心接受嘲笑。知识在于分享,更在意每一人的思维。

 

相关文章