博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
友元程序集
阅读量:7198 次
发布时间:2019-06-29

本文共 1497 字,大约阅读时间需要 4 分钟。

    最近从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 MyArrayList10     {11         //do someth........12     }13 }

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

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

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

 

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

转载于:https://www.cnblogs.com/BreatheLee/archive/2012/04/20/2460127.html

你可能感兴趣的文章
什么是BMC商业模式?
查看>>
不同浏览器中单选框和文字对齐的兼容
查看>>
Python 浮点数在列表中排序的问题
查看>>
一个失业三年后,又重新找回自信的小伙靠的是什么?
查看>>
JFinal学习-Excel导出
查看>>
linuxbridge 小贴士
查看>>
红旗inWise操作系统V8.0发布了!!!
查看>>
tiles2
查看>>
vi 合并多个文件
查看>>
切换npm源
查看>>
细数JDK里的设计模式
查看>>
Oracle中增加Split函数
查看>>
nagios 报警频率控制
查看>>
scrapy 应用
查看>>
Redis 部署策略
查看>>
2011-04-18 python 文件copy 之道 大全 (转)
查看>>
Mybatis Generator的model生成中文注释,支持oracle和mysql(通过实现CommentGenerator接口的方法来实现)...
查看>>
crate安装使用
查看>>
布隆过滤器
查看>>
cocos2dx的对象的内存释放
查看>>