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地图