Breathe李

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

    最近从winform转到web做开发,有很多东西都没有学过或者好久不用都忘记了,自己一直在补课,至于CLR这个系列又不知道要拖多久了,估计一年之后才能写完吧,o(∩_∩)o 。要学习JQuery,就要先学习JS,JS还要从基础开始学,这样能理解的更透彻一些,至少我是这样认为的。笔者从来都鄙视那些在编写代码的时候,从网上找到现成的代码,直接Ctrl+C、V就完成了的编码工作者,哪怕是你照着网上的例子打一遍,完完全全一样的,自己的理解也会更透彻一些吧,直到自己举一反三。呵呵,好了,言归正传。

    这篇博文实在工作、学习之余写的一篇,可能内容不会很长,但是我觉得还是有必要说一下。

    首先,在我们编写一个新的类型的时候,我们会考虑这个类是要公开的(public)还是只限程序集内访问的(internal)类型。我们都知道,如果我们定为public的话,这个类型,将在整个程序集内、外都可访问的。internal,则是只能在定义该类型的程序集中才能访问到。那么, 我们只想让我们指定的几个程序集访问的话 ,但是我们又不想定义为public的类型,怎么办?在这种情况下就可以用到“友元程序集”这个特性了 (暂且说为是特性,具体的我也不知道怎么表达了)

   友元程序集应该怎么使用呢?废话少说,开始上代码:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Runtime.CompilerServices;
 4 
 5 [assembly: InternalsVisibleTo("ConsoleApplication2")]
 6 namespace TestFriendSpace
 7 {
 8     public class Test{}
 9     internal class MyArrayList
10     {
11         //do someth........
12     }
13 }

上面的代码可以看到,我在namespace上面加入了一个[assembly: InternalsVisibleTo("ConsoleApplication2")]的标记,这句话就是告诉编译器我们这个程序集中的internal类,可以让ConsoleApplication2 使用我们在namespace中定义的internal类中的方法,当然也包括internal标记的方法。

  当然,这个特征看起来比较新鲜,至少我之前真的没用到过。在使用这个特征之前,我们还需要注意的一点就是说,友元程序集的耦合度非常的高,如果版本的不同,很可能会引起程序的不兼容的问题。所以,在遇到上面问题的时候,最好还是要设置成public 这样可以避免一些不必要的麻烦。

     虽然这个特性的用处不大,但是,保不准哪天我们就需要这样做,但是一定要记住这个方法使程序集之间的耦合度非常高(友元程序集之间),如果能保证友元程序集的版本一直,那用起来完全没有问题的。至少能在别人拿到我们编写的dll的时候,不是友元程序集就无法使用,当然,在这里我只是用了一个友元程序集的名称,如果真的想限定友元程序集,可以加入第二个参数为程序集的公匙,这样就完全限定了友元程序集。

 

  这篇文章也就结束了,之所以记录这样一个特征,只是觉得好玩而已,.net给了我们太多的乐趣,还有很多令人觉的好玩的特征,是等待我们去发现的。

posted on 2012-04-20 21:43  LouisLee  阅读(346)  评论(0编辑  收藏  举报