DotNet友元程序集解析

by admin on 2019年10月11日

 
 项目支出的进度中,调节和测量检验使用的只怕是最多的操作。任何代码写出来都亟需经过调节和测量检验和组成,以此扩大和晋级换代程序的平静和可信赖性。聊起.NET的单元测量检验,在那地就得提提.NET的友元程序集这一表征,也借用.NET举行单元测量试验的一个比较好用的.NET属性,来上课一下程序集、定制Attribute的相关文化。一些文化需求频仍的去品尝和反省,不要以为您会了就忽略,等你注意的时候,你就有个别心余力绌的意思了。

   生活在于不停的折腾,独有由此演习,才可以预知什么时候供给安分,何时要求挑衅。

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

一.程序集概述

 
本文首假若研究“友元程序集”的片段文化,既然是做一个分析,那么就应有把一部分知识做五个拓宽来演讲。在这里处先谈谈程序集(有人认为很领会,有人感觉完全不懂,情状不一,选用区别,需者自取吧),接下去大家切实的看看程序集这一表征。

 
程序集是三个或八个模块/财富文件的逻辑分组,程序集是选择、安全性乃至版本调节的微小单元。对于程序集的布局有如下图。

图片 1

图片 2

   
对于程序集的组成就不一一做剖析,在那间就独自谈谈元数据这一布局。元数据是二个二进制数据块,由一组数据表,元数据连接与包含IL代码的文本涉及,元数据由多少个表组成。元数据的功力有上海体育场所介绍。元数据的表有多少个连串:定义表,援用表,清单表。对于这么些表的构造在那就不做牵线了,有意思味的能够搜索一下,个人感觉元数据这一布局应该可以的商讨一下。

二.定制Attribute概述

 
 上边的阐述中简易的介绍了程序集的结构和元数据,在这里地差不离的牵线一下定制Attribute这一.NET的表征。定制Attribute允许定义的消息运用于差非常少每一个元数据表记录项,这种可增加的元数据消息能在运行时查询,进而动态改造代码的履市场价格势。在C#种,为了将三个定制Attribute应用于一个目的成分,须求将Attribute放置于指标成分后面包车型大巴一对方括号中。

 
 CLPAJERO允许将定制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那三个特征,方便我们知晓友元程序集这一特色。那篇作品希望对大家持有利于,照旧那句话,需者自取,也虚心接受嘲笑。知识在于分享,更在意每一个人的思量。

 

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图