manbetx官方网站

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

十二月 27th, 2018  |  足球投注manbetx

 
 项目支出的过程中,调试使用的恐怕是最多的操作。任何代码写出来都亟待经过调试和重组,以此扩大和擢升程序的风平浪静和可靠性。谈到.NET的单元测试,在此处就得提提.NET的友元程序集这一特性,也借用.NET举办单元测试的一个较为好用的.NET属性,来上课一下程序集、定制Attribute的有关知识。一些学问需要频繁的去品味和反思,不要觉得您会了就大意,等你注意的时候,你就有些力不从心的情趣了。

 
 项目开发的经过中,调试使用的或者是最多的操作。任何代码写出来都亟待通过调试和整合,以此扩大和擢升程序的安居乐业和可靠性。谈到.NET的单元测试,在这里就得提提.NET的友元程序集这一特征,也借用.NET举行单元测试的一个较为好用的.NET属性,来讲课一下程序集、定制Attribute的连带知识。一些知识需要反复的去品味和反省,不要以为你会了就大意,等你放在心上的时候,你就有些力不从心的意思了。

   生活在于不停的磨难,唯有通过练习,才可知哪一天需要安分,何时需要挑衅。

   生活在于不停的煎熬,唯有经过磨练,才可知何时需要安分,哪天需要挑衅。

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

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

一.程序集概述

 
本文重假诺座谈“友元程序集”的有些知识,既然是做一个分析,那么就应当把一些学问做一个进展来演说。在此地先谈谈程序集(有人觉得很了然,有人认为完全不懂,情形不一,拔取不同,需者自取吧),接下去我们具体的看看程序集这一表征。

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

opebet平台 1

opebet平台 2

   
对于程序集的组成就不一一做分析,在此间就独自谈谈元数据这一结构。元数据是一个二进制数据块,由一组数据表,元数据连接与富含IL代码的文本涉及,元数据由多少个表组成。元数据的功力有上图介绍。元数据的表有三个系列:定义表,引用表,清单表。对于这么些表的构造在此间就不做牵线了,有趣味的可以查找一下,个人觉得元数据这一布局应当好好的探究一下。

一.程序集概述

 
本文首尽管研讨“友元程序集”的有的文化,既然是做一个分析,那么就应有把部分学问做一个拓展来解说。在此处先谈谈程序集(有人觉得很了然,有人觉得完全不懂,情形各异,采纳不同,需者自取吧),接下去我们具体的探访程序集这一特性。

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

opebet平台 3

opebet平台 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.CompilerService(Service)s.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类,该类指定平常仅在现阶段先后集中可见的系列对点名程序集可见。该类包含多个特性和一个主意。

opebet平台,   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这几个特性,方便我们了解友元程序集这一特性。这篇散文希望对大家持有协理,如故这句话,需者自取,也虚心接受吐槽。知识在于分享,更在于每一个人的思辨。

 

相关文章

Your Comments

近期评论

    功能


    网站地图xml地图