DotNet友元程序集解析

by admin on 2019年4月7日

 
 项目支付的进度中,调节和测试使用的或是是最多的操作。任何代码写出来都急需通过调节和测试和组合,以此扩大和升级换代程序的祥和和可相信性。谈起.NET的单元测试,在此处就得提提.NET的友元程序集那一特色,也借用.NET举办单元测试的1个比较好用的.NET属性,来讲学一下程序集、定制Attribute的有关文化。一些文化必要反复的去品尝和反省,不要认为你会了就忽略,等您放在心上的时候,你就某个力不从心的趣味了。

 
 项目费用的长河中,调节和测试使用的可能是最多的操作。任何代码写出来都亟需经过调节和测试和构成,以此扩充和升级程序的安定团结和可信赖性。提及.NET的单元测试,在此间就得提提.NET的友元程序集那1风味,也借用.NET举行单元测试的3个相比好用的.NET属性,来教学一下程序集、定制Attribute的相关知识。一些知识须要频仍的去尝试和自省,不要以为您会了就忽略,等你注意的时候,你就有个别力不从心的意趣了。

   生活在于不停的煎熬,唯有因而陶冶,才可见哪一天供给安分,哪一天须求挑衅。

   生活在于不停的磨难,唯有经过磨炼,才可见曾几何时须求安分,曾几何时供给挑战。

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

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

1.程序集概述

 
本文首借使座谈“友元程序集”的片段文化,既然是做三个解析,那么就应有把有个别知识做1位作品展开来解说。在此处先谈谈程序集(有人以为很领会,有人觉得完全不懂,景况区别,选用差异,需者自取吧),接下去咱们现实的探访程序集这一本性。

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

图片 1

图片 2

   
对于程序集的组成就不一壹做分析,在此间就独自谈谈元数据那一组织。元数据是三个2进制数据块,由1组数据表,元数据连接与富含IL代码的文件涉及,元数据由多少个表组成。元数据的功能有上海教室介绍。元数据的表有七个品种:定义表,引用表,清单表。对于那些表的布局在此处就不做牵线了,有趣味的能够寻找一下,个人觉得元数据这1构造应当好好的商讨一下。

一.程序集概述

 
本文主假使座谈“友元程序集”的局地知识,既然是做1个分析,那么就应有把有些学问做3人作品展开来演讲。在此处先谈谈程序集(有人觉得很精晓,有人认为完全不懂,境况例外,选取差异,需者自取吧),接下去大家现实的看看程序集这一表征。

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

图片 3

图片 4

   
对于程序集的组成就不一一做分析,在此间就独自谈谈元数据这一构造。元数据是二个贰进制数据块,由1组数据表,元数据连接与富含IL代码的公文涉及,元数据由多少个表组成。元数据的效益有上海体育地方介绍。元数据的表有两个项目:定义表,引用表,清单表。对于那些表的组织在此间就不做牵线了,有趣味的能够查找一下,个人认为元数据那一结构应当好好的讨论一下。

二.定制Attribute概述

 
 下面的论述中简单的介绍了先后集的构造和元数据,在此处大概的介绍一下定制Attribute这一.NET的特色。定制Attribute允许定义的新闻使用于大致每三个元数据表记录项,那种可扩充的元数据音讯能在运作时查询,从而动态改变代码的实行办法。在C#种,为了将二个定制Attribute应用于3个对象成分,供给将Attribute放置于目的成分前面包车型大巴一对方括号中。

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

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

   
上边代码取自InternalsVisibleToAttribute类中,该类是形成友元程序集天性的着力目的,下边会做3个切实的介绍。AttributeUsage要求接受三个AttributeTargets枚举类型的值作为参数,称之为定位参数,是强制性的,必须钦命。AllowMultiple参数用于获取或设置2个布尔值,提示是或不是有多少个实例钦命的质量能够为单个程序成分钦赐。Inherited参数用于获取或设置3个布尔值,提醒钦点的习性是还是不是能够接二连三由派生类和重写成员。

 
 定制Attribute能够运用于单个指标成分,定制Attribute的各样是不屑壹顾的。在C#种,可将各样Attribute都封闭到壹对方括号中,也能够在局地方括号中查封多个以逗号分隔的Attribute。

 
 定制Attribute便是三个类的实例,它被系列化成驻留在元数据中的五个字节流,在运行时,能够对元数据中含有的字节举行反连串化,从而构造类的贰个实例。

二.定制Attribute概述

 
 上边的论述中简易的介绍了先后集的构造和元数据,在此间大致的介绍一下定制Attribute那一.NET的风味。定制Attribute允许定义的消息应用于差不多每三个元数据表记录项,那种可扩充的元数据音信能在运维时查询,从而动态改变代码的推行措施。在C#种,为了将三个定制Attribute应用于一个目的成分,必要将Attribute放置于指标成分前面包车型地铁一对方括号中。

 
 CL奥迪Q三允许将定制Attribute应用于可在文件的元数据中意味的差不离全体因素。定制Attribute重要采纳于程序集、模块、类型、字段、方法、方法参数、方法重临值、属性、事件、泛型类型参数。attribute是类的3个实例,将三个attribute应用于四个对象成分时,语法类似于调用类的某部实例构造函数。定制Attribute的实例如下:

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

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

 
 定制Attribute能够运用于单个目的成分,定制Attribute的11是无所谓的。在C#种,可将种种Attribute都封闭到壹对方括号中,也足以在部分方括号中查封多少个以逗号分隔的Attribute。

 
 定制Attribute便是多少个类的实例,它被类别化成驻留在元数据中的八个字节流,在运行时,能够对元数据中包蕴的字节进行反体系化,从而构造类的三个实例。

三.友元程序集解析

 
 扯了半天,终于到教师“友元程序集”这么些概念,“友元程序集”在.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;
      }
    }

 
 该属性为二个只读属性,叁个意味友元程序集名称的字符串。该属性用于获取友元程序集的称呼,采取internal 关键字标记的装有类型和类型成员对该程序集均为可知。

  2.InternalsVisibleToAttribute()

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

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

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

三.友元程序集解析

 
 扯了半天,终于到教师“友元程序集”那三个定义,“友元程序集”在.NET2中提议,使用InternalsVisibleToAttribute来兑现这1风味,InternalsVisibleTo只好用于程序集,并且你能够在同3个主次集种应用多次。源程序集:包罗那么些天性的次序集。友元程序集能够看出源程序集的保有内部成员,类似于国有的。

   友元程序集实例介绍:

//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;
      }
    }

 
 该属性为3个只读属性,1个意味友元程序集名称的字符串。该属性用于获取友元程序集的称谓,采纳internal 关键字标记的拥有类型和项目成员对该程序集均为可知。

  2.InternalsVisibleToAttribute()

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

   该办法为多个构造函数,用钦命的友元程序集的名称起首化 <see
cref=”T:System.Runtime.CompilerServices.InternalsVisibleToAttribute”/>
类的新实例。接收贰个友元程序集的名目。

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

四.总结

 
 对于本文重如若在介绍友元程序集那壹个性,顺带介绍程序集和定制Attribute那七个特色,方便我们掌握友元程序集那1风味。那篇作品希望对我们有着帮衬,依旧这句话,需者自取,也虚心接受戏弄。知识在于分享,更在乎每一人的思量。

 

四.总结

 
 对于本文首倘若在介绍友元程序集那1天性,顺带介绍程序集和定制Attribute那两本性状,方便大家清楚友元程序集那一特色。那篇文章希望对我们有所支持,照旧那句话,需者自取,也虚心接受讥笑。知识在于分享,更在于每一个人的想想。

 

发表评论

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

网站地图xml地图