DotNet友元程序集深入解析

 
 项目花费的长河中,调节和测量检验使用的大概是最多的操作。任何代码写出来都亟需经过调节和测量检验和重新整合,以此扩展和进级程序的地西泮团结和可信赖性。聊到.NET的单元测量检验,在那间就得提提.NET的友元程序集那豆蔻梢头性情,也借用.NET进行单元测量试验的三个较为好用的.NET属性,来说授一下程序集、定制Attribute的相干知识。一些学问须求频频的去尝尝和反思,不要以为你会了就轮廓,等你注意的时候,你就有些力不胜任的情趣了。

   生活在于不停的折腾,独有通过磨炼,才可以预知哪天需求安分,哪天供给挑战。

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

意气风发.程序集概述

 
本文首倘使钻探“友元程序集”的局地文化,既然是做三个解析,那么就相应把部分知识做贰位展览开来演说。在这里间先谈谈程序集(有人感到很领会,有人感到完全不懂,景况例外,选用差异,需者自取吧),接下去大家实际的会见程序集这一表征。

 
程序集是多个或八个模块/财富文件的逻辑分组,程序集是援引、安全性以致版本调控的矮小单元。对于程序集的布局有如下图。

图片 1

图片 2

   
对于程序集的组成就不风华正茂风流倜傥做剖析,在这里处就独自谈谈元数据那大器晚成组织。元数据是叁个二进制数据块,由生机勃勃组数据表,元数据连接与含蓄IL代码的文件涉及,元数据由几个表组成。元数据的作用有上海教室介绍。元数据的表有三个档案的次序:定义表,引用表,项目清单表。对于这个表的结构在此就不做牵线了,有乐趣的能够寻找一下,个人感觉元数据那风度翩翩组织应该能够的商量一下。

二.定制Attribute概述

 
 下边包车型地铁阐述中轻便的介绍了程序集的结会谈元数据,在这间差非常少的牵线一下定制Attribute那豆蔻年华.NET的特色。定制Attribute允许定义的新闻应用于差不离每八个元数据表记录项,这种可扩充的元数据新闻能在运作时查询,进而动态更动代码的实施办法。在C#种,为了将二个定制Attribute应用于三个对象成分,必要将Attribute放置于指标成分前边的黄金时代对方括号中。

 
 CLPAJERO允许将定制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那四个特点,方便大家领会友元程序集这风度翩翩特性。那篇文章希望对我们持有助于,照旧那句话,需者自取,也自持采取捉弄。知识在于分享,更在意每壹位的思忖。

 

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注