DotNet友元程序集拆解剖析大红鹰葡京会

 
 项目开拓的进度中,调节和测量检验使用的可能是最多的操作。任何代码写出来都必要通过调试和重新整合,以此扩充和升高程序的国家长期加强和可信性。谈起.NET的单元测验,在此就得提提.NET的友元程序集这黄金年代特点,也借用.NET进行单元测量检验的三个比较好用的.NET属性,来说课一下程序集、定制Attribute的连带文化。一些知识要求频仍的去尝试和自省,不要认为您会了就忽视,等您放在心上的时候,你就有个别心余力绌的情致了。

   生活在于不停的横祸,唯有经过历炼,才可以预知曾几何时须要安分,哪一天要求挑战。

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

风姿罗曼蒂克.程序集概述

 
本文重要是座谈“友元程序集”的部分文化,既然是做一个深入深入分析,那么就相应把有个别知识做一个开展来解说。在那间先谈谈程序集(有人认为很理解,有人感觉完全不懂,情状差异,选取分裂,需者自取吧卡塔尔国,接下去大家现实的拜候程序集那一性格。

 
程序集是叁个或多少个模块/财富文件的逻辑分组,程序集是重用、安全性以致版本调节的十分的小单元。对于程序集的组织有如下图。

大红鹰葡京会 1

大红鹰葡京会 2

   
对于程序集的组成就不黄金时代黄金时代做深入分析,在那处就独自谈谈元数据那少年老成布局。元数据是一个二进制数据块,由风流浪漫组数据表,元数据连接与含蓄IL代码的文书涉及,元数据由多少个表组成。元数据的功能有上海体育场所介绍。元数据的表有多个类型:定义表,引用表,项目清单表。对于那一个表的结构在那就不做牵线了,风野趣的能够寻找一下,个人认为元数据那豆蔻梢头布局应当好好的商讨一下。

二.定制Attribute概述

 
 下边包车型大巴论述中简易的牵线了先后集的构造和元数据,在这里间大致的介绍一下定制Attribute那一.NET的性状。定制Attribute允许定义的消息应用于大致每三个元数据表记录项,这种可扩张的元数据音信能在运作时查询,进而动态退换代码的执行办法。在C#种,为了将二个定制Attribute应用于二个目的成分,须要将Attribute放置于目的元素前面的后生可畏对方括号中。

 
 CL宝马X5允许将定制Attribute应用于可在文件的元数据中代表的差不离具有因素。定制Attribute首要接纳于程序集、模块、类型、字段、方法、方法参数、方法再次回到值、属性、事件、泛型类型参数。attribute是类的叁个实例,将三个attribute应用于二个对象成分时,语法相似于调用类的某部实例构造函数。定制Attribute的实比如下:

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

   
上面代码取自InternalsVisibleToAttribute类中,该类是瓜熟蒂落友元程序集个性的中坚目的,下边会做八个切实的介绍。AttributeUsage要求选择一个AttributeTargets枚举类型的值作为参数,称之为定位参数,是强制性的,必需钦命。AllowMultiple参数用于获取或设置三个布尔值,提醒是不是有多少个实例钦命的属性可感觉单个程序成分钦定。Inherited参数用于获取或安装四个布尔值,提示钦命的性质是不是足以三番五次由派生类和重写成员。

 
 定制Attribute能够接纳于单个指标成分,定制Attribute的逐条是不屑大器晚成顾的。在C#种,可将每种Attribute都密封到风流洒脱对方括号中,也得以在生龙活虎部分方括号中查封三个以逗号分隔的Attribute。

 
 定制Attribute便是一个类的实例,它被体系化成驻留在元数据中的叁个字节流,在运作时,可以对元数据中含有的字节实行反种类化,进而构造类的一个实例。

三.友元程序集深入分析

 
 扯了半天,终于到教师“友元程序集”这三个概念,“友元程序集”在.NET第22中学提出,使用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那多个性子,方便大家知晓友元程序集那风流罗曼蒂克特征。这篇文章希望对大家具备助于,依然那句话,需者自取,也谦和选用吐槽。知识在于分享,更在于每一人的酌量。

 

相关文章

admin

网站地图xml地图