DotNet友元程序集解析爱博体育app

 
 项目花费的进度中,调试使用的或者是最多的操作。任何代码写出来都亟需经过调试和烧结,以此扩充和升级程序的安定团结和可信赖性。谈到.NET的单元测试,在那里就得提提.NET的友元程序集这一特点,也借用.NET进行单元测试的一个相比好用的.NET属性,来讲学一下程序集、定制Attribute的连锁文化。一些学问需求频仍的去品尝和自省,不要觉得您会了就忽略,等你注意的时候,你就有些力不从心的情趣了。

 
 项目成本的进度中,调试使用的恐怕是最多的操作。任何代码写出来都亟需通过调试和组合,以此扩充和升级程序的平静和可信赖性。谈到.NET的单元测试,在那边就得提提.NET的友元程序集这一特色,也借用.NET进行单元测试的一个相比好用的.NET属性,来讲学一下程序集、定制Attribute的连锁文化。一些文化须要频仍的去品尝和反省,不要认为您会了就忽略,等您注意的时候,你就有些力不从心的趣味了。

   生活在于不停的折磨,唯有由此训练,才可见哪天必要安分,曾几何时须求挑战。

   生活在于不停的折腾,只有因而磨炼,才可见什么时候要求安分,何时要求挑衅。

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

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

一.程序集概述

 
本文首如若切磋“友元程序集”的一部分文化,既然是做一个分析,那么就应该把一部分知识做一个进展来阐述。在那边先谈谈程序集(有人觉得很精通,有人认为完全不懂,情形各异,选取不相同,需者自取吧),接下去大家实际的探视程序集这一特征。

 
程序集是一个或七个模块/资源文件的逻辑分组,程序集是录取、安全性以及版本控制的纤维单元。对于程序集的结构有如下图。

爱博体育app 1

爱博体育app 2

   
对于程序集的组成就不一一做分析,在此地就独自谈谈元数据这一构造。元数据是一个二进制数据块,由一组数据表,元数据连接与分包IL代码的公文涉及,元数据由多少个表组成。元数据的效能有上图介绍。元数据的表有四个品类:定义表,引用表,清单表。对于那些表的布局在此处就不做牵线了,有趣味的可以找寻一下,个人觉得元数据这一社团应该能够的探讨一下。

一.程序集概述

 
本文紧即使啄磨“友元程序集”的一些文化,既然是做一个解析,那么就相应把部分知识做一个展开来讲演。在此间先谈谈程序集(有人觉得很明白,有人觉得完全不懂,意况例外,选取分歧,需者自取吧),接下去大家实际的探访程序集这一表征。

 
程序集是一个或多少个模块/资源文件的逻辑分组,程序集是选拔、安全性以及版本控制的纤维单元。对于程序集的结构有如下图。

爱博体育app 3

爱博体育app 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那八个特点,方便大家知道友元程序集这一特色。那篇小说希望对大家有所辅助,照旧这句话,需者自取,也虚心接受吐槽。知识在于分享,更在于每一个人的沉思。

 

相关文章