DotNet友元程序集分析

 
 项目开拓的进程中,调节和测量检验使用的或是是最多的操作。任何代码写出来都须求经过调节和测量检验和构成,以此扩展和提高程序的安澜和可相信性。聊起.NET的单元测验,在这里就得提提.NET的友元程序集这一风味,也借用.NET进行单元测验的一个相比较好用的.NET属性,来教学一下程序集、定制Attribute的有关文化。一些知识要求频繁的去尝试和自省,不要认为您会了就忽略,等你注意的时候,你就有些力不胜任的意趣了。

   生活在于不停的隐患,唯有通过陶冶,才可知曾几何时供给安分,曾几何时须求挑衅。

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

一.程序集概述

 
本文主固然研讨“友元程序集”的一些知识,既然是做三个深入分析,那么就应该把部分文化做二个进展来阐释。在那边先谈谈程序集(有人感觉很领会,有人以为完全不懂,情状例外,选取差异,需者自取吧),接下去我们实际的看看程序集这一特色。

 
程序集是八个或七个模块/财富文件的逻辑分组,程序集是录取、安全性以及版本调整的细单反元。对于程序集的结构有如下图。

图片 1

图片 2

   
对于程序集的组成就不一一做解析,在那边就独自谈谈元数据这一构造。元数据是三个二进制数据块,由一组数据表,元数据连接与含蓄IL代码的公文涉及,元数据由多少个表组成。元数据的效力有上航海用教室介绍。元数据的表有多少个体系:定义表,援用表,清单表。对于那几个表的协会在那边就不做牵线了,风乐趣的能够搜索一下,个人感到元数据这一结构应该好好的研讨一下。

二.定制Attribute概述

 
 下面的演说中回顾的牵线了前后相继集的组织和元数据,在此间大致的介绍一下定制Attribute这一.NET的性状。定制Attribute允许定义的新闻运用于大约每一个元数据表记录项,这种可扩充的元数据消息能在运维时查询,进而动态改造代码的推行措施。在C#种,为了将贰个定制Attribute应用于二个对象成分,必要将Attribute放置于目的成分前面包车型客车一对方括号中。

 
 CLCR-V允许将定制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地图