DotNet友元程序集解析。DotNet友元程序集解析。

 
 项目支付的进程中,调试使用的也许是绝多的操作。任何代码写出来都需要经过调试和做,以此扩展以及提升程序的安静以及可靠性。谈到.NET的单元测试,在这边就得提提.NET的友元程序集就同一特性,也借用.NET进行单元测试的一个比较好用的.NET属性,来讲课一下程序集、定制Attribute的连锁文化。一些文化要数的去品尝和反省,不要看您晤面了就是非留心,等而注意的当儿,你就算生出几力不从心的意思了。

 
 项目支出之经过中,调试使用的或许是无比多之操作。任何代码写出来都用经过调试以及做,以此扩展以及升级程序的风平浪静和可靠性。谈到.NET的单元测试,在此处就得提提.NET的友元程序集就无异于特征,也借用.NET进行单元测试的一个较为好用的.NET属性,来教学一下程序集、定制Attribute的有关知识。一些知识要频繁的夺品味和自省,不要当你会了不畏未上心,等你注意的时,你就是产生把力不从心的意思了。

   生活在不停歇的折腾,只有经磨练,才可领略何时要安分,何时要挑战。

   生活在不歇的煎熬,只有由此磨练,才可知晓何时要安分,何时要挑战。

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

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

一.程序集概述

 
本文主要是座谈“友元程序集”的一部分文化,既然是召开一个分析,那么尽管应有将一部分学问做一个拓展来阐释。在此先谈谈程序集(有人认为非常了解,有人以为了无理解,情况各异,选择不同,需者自取吧),接下我们实际的省程序集就无异于表征。

 
程序集是一个要么多只模块/资源文件之逻辑分组,程序集是引用、安全性以及版本控制的尽小单元。对于程序集的构造产生如下图。

图片 1

图片 2

   
对于程序集的组成就不一一做分析,在这边虽独自谈谈元数据立马同一构造。元数据是一个二进制数据块,由同组数据表,元数据连接跟富含IL代码的公文涉及,元数据由几只说明组成。元数据的企图来上图介绍。元数据的表有三单门类:定义表,引用表,清单表。对于这些发明底构造以此就是无举行牵线了,有趣味之得找寻一下,个人觉得首先数据立马同一结构应该好的钻研一下。

一.程序集概述

 
本文主要是讨论“友元程序集”的片段知识,既然是举行一个剖析,那么尽管应该拿有些文化做一个进展来论述。在这边先谈谈程序集(有人当怪了解,有人认为了不理解,情况例外,选择不同,需者自取吧),接下我们切实的看程序集就等同风味。

 
程序集是一个或多只模块/资源文件之逻辑分组,程序集是录取、安全性以及版本控制的尽小单元。对于程序集的构造产生如下图。

图片 3

图片 4

   
对于程序集的组成就不一一做分析,在此间就是独自谈谈元数据就无异组织。元数据是一个二进制数据块,由同组数据表,元数据连接与含蓄IL代码的文本涉及,元数据由几单说明组成。元数据的来意来上图介绍。元数据的表有三单种类:定义表,引用表,清单表。对于这些发明的组织于此处虽未做牵线了,有趣味之可以找寻一下,个人认为首先数据及时等同布局应该可以的钻研一下。

二.定制Attribute概述

 
 上面的阐发中简单的介绍了次集的组织及首家数据,在此间大概的介绍一下定制Attribute这一.NET之性状。定制Attribute允许定义之音运用被几各个一个正数据表记录项,这种可扩大的首数据信息能够在运作时查询,从而动态改变代码的实践措施。在C#种植,为了以一个定制Attribute应用叫一个目标元素,需要拿Attribute放置于目标元素前面的平等针对性方括号丁。

 
 CLR允许用定制Attribute应用为可在文件的首任数据被象征的几有因素。定制Attribute主要以叫程序集、模块、类型、字段、方法、方法参数、方法返回值、属性、事件、泛型类型参数。attribute是类似的一个实例,将一个attribute应用被一个对象元素时,语法类似于调用类的之一实例构造函数。定制Attribute的实例如下:

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

   
上面代码取自InternalsVisibleToAttribute类中,该类是就友元程序集特性的骨干目标,下面会开一个实际的牵线。AttributeUsage需要承受一个AttributeTargets枚举类型的值作为参数,称之为定位参数,是强制性的,必须指定。AllowMultiple参数用于取或设置一个布尔值,指示是否发生多单实例指定的习性可以吗单个程序元素指定。Inherited参数用于获取或设置一个布尔值,指示指定的性能是否可以继承由派生类和重写成员。

 
 定制Attribute可以用叫单个目标元素,定制Attribute的依次是开玩笑的。在C#种,可将每个Attribute都封及同针对方括号受,也可以于片方括号被查封多独以逗号分隔的Attribute。

 
 定制Attribute就是一个近乎的实例,它让序列化成驻留于首任数据中之一个字节流,在运作时,可以对元数据被蕴藏的字节进行反序列化,从而构筑造类的一个实例。

二.定制Attribute概述

 
 上面的阐释中略的牵线了先后集的结构和初次数据,在此大概的介绍一下定制Attribute这一.NET之特色。定制Attribute允许定义之消息应用为几各个一个冠数据表记录项,这种可扩大的首批数据信息会以运作时查询,从而动态改变代码的实行办法。在C#种植,为了将一个定制Attribute应用叫一个目标元素,需要用Attribute放置于目标元素前面的相同对方括号丁。

 
 CLR允许将定制Attribute应用为可在文件之处女数据中意味着的几乎所有因素。定制Attribute主要运用被程序集、模块、类型、字段、方法、方法参数、方法返回值、属性、事件、泛型类型参数。attribute是类似的一个实例,将一个attribute应用叫一个靶元素时,语法类似于调用类的有实例构造函数。定制Attribute的实例如下:

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

   
上面代码取自InternalsVisibleToAttribute类中,该类是就友元程序集特性的骨干目标,下面会开一个实际的介绍。AttributeUsage需要承受一个AttributeTargets朵举类型的价当参数,称之为定位参数,是强制性的,必须指定。AllowMultiple参数用于获取或安装一个布尔值,指示是否发差不多个实例指定的性质可以呢单个程序元素指定。Inherited参数用于取或安装一个布尔值,指示指定的特性是否可持续由派生类和重写成员。

 
 定制Attribute可以行使为单个目标元素,定制Attribute的各个是无所谓的。在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”/>
类的新实例。接收一个友元程序集的称呼。

 
对于友元程序集有一个约束,如果一个友元程序集是签约的,那么源程序集为了保险信任是的代码,就需要指定友元程序集的公钥。

三.友元程序集解析

 
 扯了大体上上,终于到教授“友元程序集”这一个概念,“友元程序集”在.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”/>
类的新实例。接收一个友元程序集的称。

 
对于友元程序集有一个约束,如果一个友元程序集是签的,那么源程序集为了保证信任是的代码,就待指定友元程序集的公钥。

四.总结

 
 对于本文主要是以介绍友元程序集就无异风味,顺带介绍程序集和定制Attribute这片只特点,方便大家知道友元程序集就同特征。这篇稿子要对大家持有帮助,还是那么句话,需者自取,也虚心接受吐槽。知识在分享,更在乎各一个总人口之思索。

 

四.总结

 
 对于本文主要是以介绍友元程序集就无异风味,顺带介绍程序集和定制Attribute这简单只特色,方便大家清楚友元程序集就同样特点。这篇稿子要对大家具有帮助,还是那句话,需者自取,也虚心接受吐槽。知识在分享,更在乎各一个总人口之思辨。

 

相关文章