DotNet友元程序集解析

 
 项目支付的经过中,调节和测试使用的或是是最多的操作。任何代码写出来都急需通过调节和测试和构成,以此扩张和升级换代程序的大吉大利和可信性。提起.NET的单元测试,在那边就得提提.NET的友元程序集那1特色,也借用.NET进行单元测试的二个比较好用的.NET属性,来上课一下程序集、定制Attribute的连锁文化。1些知识须要频仍的去品尝和自省,不要以为您会了就忽略,等你注意的时候,你就有个别力不从心的意趣了。

 
 项目支出的历程中,调节和测试使用的恐怕是最多的操作。任何代码写出来都亟待经过调试和烧结,以此扩大和升迁程序的平稳和可信赖性。说起.NET的单元测试,在此地就得提提.NET的友元程序集那壹特征,也借用.NET实行单元测试的三个较为好用的.NET属性,来上课一下程序集、定制Attribute的相关知识。壹些知识需求反复的去品味和自省,不要以为你会了就大意,等您放在心上的时候,你就某个力不从心的情致了。

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

   生活在于不停的横祸,唯有通过练习,才可见哪一天要求安分,什么时候供给挑战。

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

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

一.程序集概述

 
本文首如果座谈“友元程序集”的一对文化,既然是做1个分析,那么就应当把1些知识做叁个开始展览来演讲。在此地先谈谈程序集(有人觉得很掌握,有人觉得完全不懂,情形各异,选拔分化,需者自取吧),接下去我们具体的看看程序集那一个性。

 
程序集是1个或多个模块/财富文件的逻辑分组,程序集是录取、安全性以及版本控制的矮小单元。对于程序集的构造有如下图。

图片 1

图片 2

   
对于程序集的组成就不一一做分析,在此间就独自谈谈元数据那1组织。元数据是一个贰进制数据块,由一组数据表,元数据连接与分包IL代码的文件涉及,元数据由多少个表组成。元数据的效果有上航海用教室介绍。元数据的表有多少个品类:定义表,引用表,清单表。对于那么些表的布局在那里就不做牵线了,有趣味的能够找寻一下,个人觉得元数据那一协会应该能够的研究一下。

壹.程序集概述

 
本文主即使座谈“友元程序集”的有个别学问,既然是做2个剖析,那么就应该把1些文化做一个进行来论述。在这边先谈谈程序集(有人认为很精通,有人以为完全不懂,情状各异,选用区别,需者自取吧),接下去大家具体的探访程序集这一风味。

 
程序集是3个或四个模块/能源文件的逻辑分组,程序集是录取、安全性以及版本控制的小小单元。对于程序集的构造有如下图。

图片 3

图片 4

   
对于程序集的组成就不壹一做分析,在此地就独自谈谈元数据那①组织。元数据是1个2进制数据块,由1组数据表,元数据连接与含蓄IL代码的文件涉及,元数据由多少个表组成。元数据的效率有上图介绍。元数据的表有多个品种:定义表,引用表,清单表。对于这么些表的布局在此处就不做牵线了,有趣味的可以寻找一下,个人觉得元数据那1组织应该可以的研商一下。

二.定制Attribute概述

 
 上面的阐发中简单的牵线了先后集的结构和元数据,在那边差不离的介绍一下定制Attribute那一.NET的风味。定制Attribute允许定义的音讯使用于差不多每多个元数据表记录项,那种可扩展的元数据消息能在运作时查询,从而动态改变代码的推行办法。在C#种,为了将3个定制Attribute应用于二个指标元素,供给将Attribute放置于指标成分前边的1对方括号中。

 
 CLR允许将定制Attribute应用于可在文书的元数据中意味的差不离全数因素。定制Attribute首要使用于程序集、模块、类型、字段、方法、方法参数、方法再次来到值、属性、事件、泛型类型参数。attribute是类的二个实例,将三个attribute应用于1个对象成分时,语法类似于调用类的某部实例构造函数。定制Attribute的实例如下:

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

   
上边代码取自InternalsVisibleToAttribute类中,该类是水到渠成友元程序集个性的基本指标,上面会做二个具体的介绍。AttributeUsage要求承受二个AttributeTargets枚举类型的值作为参数,称之为定位参数,是强制性的,必须钦命。AllowMultiple参数用于获取或安装1个布尔值,提示是或不是有八个实例钦点的性质可以为单个程序成分钦定。Inherited参数用于获取或设置五个布尔值,提示钦定的天性是或不是足以继承由派生类和重写成员。

 
 定制Attribute能够选用于单个目的元素,定制Attribute的逐一是嗤之以鼻的。在C#种,可将各样Attribute都封闭到一对方括号中,也能够在局地方括号中查封多个以逗号分隔的Attribute。

 
 定制Attribute就是二个类的实例,它被类别化成驻留在元数据中的三个字节流,在运转时,能够对元数据中包罗的字节进行反连串化,从而构造类的三个实例。

二.定制Attribute概述

 
 下面的阐发中回顾的牵线了先后集的布局和元数据,在此处差不离的介绍一下定制Attribute那一.NET的天性。定制Attribute允许定义的音信运用于差不多每3个元数据表记录项,这种可扩展的元数据音讯能在运转时查询,从而动态改变代码的实践形式。在C#种,为了将二个定制Attribute应用于1个对象成分,须要将Attribute放置于目标元素后边的1对方括号中。

 
 CL凯雷德允许将定制Attribute应用于可在文书的元数据中象征的大概拥有因素。定制Attribute重要利用于程序集、模块、类型、字段、方法、方法参数、方法再次回到值、属性、事件、泛型类型参数。attribute是类的二个实例,将1个attribute应用于3个对象成分时,语法类似于调用类的某部实例构造函数。定制Attribute的实例如下:

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

   
上边代码取自InternalsVisibleToAttribute类中,该类是做到友元程序集个性的为主目的,上面会做二个具体的牵线。AttributeUsage要求接受2个AttributeTargets枚举类型的值作为参数,称之为定位参数,是强制性的,必须内定。AllowMultiple参数用于获取或安装一个布尔值,提醒是还是不是有多个实例钦定的习性能够为单个程序元素钦定。Inherited参数用于获取或安装二个布尔值,提醒钦定的属性是还是不是足以继承由派生类和重写成员。

 
 定制Attribute能够行使于单个目的成分,定制Attribute的各样是不屑一顾的。在C#种,可将每种Attribute都封闭到1对方括号中,也能够在局地方括号中查封八个以逗号分隔的Attribute。

 
 定制Attribute正是2个类的实例,它被系列化成驻留在元数据中的多个字节流,在运维时,能够对元数据中含有的字节进行反体系化,从而构造类的四个实例。

三.友元程序集解析

 
 扯了半天,终于到教师“友元程序集”那一个概念,“友元程序集”在.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类,该类钦点常常仅在最近程序集中可知的品类对点名程序集可知。该类包涵四个天性和3个办法。

   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”/>
类的新实例。接收贰个友元程序集的称谓。

 
对于友元程序集有一个约束,假若3个友元程序集是签约的,那么源程序集为了保障信任正确的代码,就要求钦点友元程序集的公钥。

三.友元程序集解析

 
 扯了半天,终于到教学“友元程序集”那二个概念,“友元程序集”在.NET2中提议,使用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;
      }
    }

 
 该属性为3个只读属性,2个代表友元程序集名称的字符串。该属性用于获取友元程序集的名称,采取internal 关键字标记的持有系列和档次成员对该程序集均为可见。

  2.InternalsVisibleToAttribute()

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

   该办法为贰个构造函数,用钦点的友元程序集的名号开首化 <see
cref=”T:System.Runtime.Compiler瑟维斯s.InternalsVisibleToAttribute”/>
类的新实例。接收一个友元程序集的称号。

 
对于友元程序集有1个约束,借使2个友元程序集是签订契约的,那么源程序集为了保险信任正确的代码,就须要钦定友元程序集的公钥。

四.总结

 
 对于本文首若是在介绍友元程序集这一表征,顺带介绍程序集和定制Attribute这多个特色,方便大家精晓友元程序集那一特点。这篇小说希望对大家享有协理,照旧那句话,需者自取,也虚心接受吐槽。知识在于分享,更在乎每1位的思辨。

 

四.总结

 
 对于本文主即使在介绍友元程序集那1特点,顺带介绍程序集和定制Attribute那两天性情,方便我们知道友元程序集那一特色。这篇作品希望对大家有所帮衬,仍旧这句话,需者自取,也虚心接受戏弄。知识在于分享,更在于每个人的考虑。

 

相关文章

admin

网站地图xml地图