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这有限单特色,方便大家理解友元程序集就同一特性。这首文章要对大家有助,还是那么句话,需者自取,也虚心接受吐槽。知识在分享,更在各级一个人数的思维。

 

相关文章

admin

网站地图xml地图