个人档案DotNet友元程序集解析

个人档案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这片单特点,方便大家领略友元程序集就同特征。这首文章要对大家有助,还是那么句话,需者自取,也虚心接受吐槽。知识在分享,更在于各级一个丁的合计。

 

admin

网站地图xml地图