DotNet友元程序集解析

 
 项目支付之过程遭到,调试使用的或是最为多之操作。任何代码写出来都得经过调试以及重组,以此扩展以及升级换代程序的安宁和可靠性。谈到.NET的单元测试,在此地虽得提提.NET的友元程序集就等同特色,也借用.NET进行单元测试的一个较为好用的.NET属性,来讲课一下程序集、定制Attribute的相关知识。一些知识要反复的去尝尝和反思,不要看你会了就非放在心上,等您注意的时候,你不怕发若干力不从心的意了。

   生活在不停歇的煎熬,只有经磨练,才不过明白何时要安分,何时要挑战。

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

一.程序集概述

 
本文主要是讨论“友元程序集”的有的文化,既然是做一个分析,那么即使应该把部分学问做一个进行来阐释。在此地先谈谈程序集(有人以为老了解,有人觉得了不掌握,情况不同,选择不同,需者自取吧),接下我们切实的探视程序集就同样特点。

 
程序集是一个要么多独模块/资源文件的逻辑分组,程序集是引用、安全性和版本控制的绝小单元。对于程序集的构造产生如下图。

房地产项目 1

房地产项目 2

   
对于程序集的组成就不一一做分析,在此地虽独自谈谈元数据及时等同构造。元数据是一个二进制数据块,由同组数据表,元数据连接跟富含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就是一个像样的实例,它被序列化成驻留于首届数据中之一个字节流,在运作时,可以对元数据被含有的字节进行反序列化,从而构筑造类的一个实例。

三.友元程序集解析

 
 扯了大体上龙,终于到教授“友元程序集”这一个概念,“友元程序集”在.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这有限只特性,方便大家明白友元程序集就无异风味。这篇稿子要对大家有所帮助,还是那么句话,需者自取,也虚心接受吐槽。知识在分享,更在各一个人之思维。

 

相关文章