程序集,命名空间和反射

程序集和命名空间的概念不是一一对应的。一个程序集当中可能包含多个命名空间,一个命名空间也可能分布在多个程序集中。程序集是我们通常说指的.Dll文件,其中至少含有一个类的编译结果。当程序要使用某个程序集中的某个类就必须告诉编译器这个类在哪(在哪个程序集或dll文件中),编译器才能找到它,也就是说要首先添加该程序集的引用。

 

命名空间仅仅是对很多的类做也一个分类(逻辑关系),而程序集才是这些类真正所存在的地方(物理关系)。

 

因此知道一个类在哪个程序集中对使用这个类起到了至关重要的作用。

 

当往往有的时候不确定这个类在哪个程序集中,仅仅知道这个类的名称。这时候就需要用到反射,即在程序运行的时候提供该类的地址,好让我们的程序能够找到并使用它。

 

也就是说在实际的应用中,我们可能在开发时不能把代码写的很清楚(比如对象的类型),而是在运行过程中去实现动态的绑定(比如用基类指针去指向派生类对象)。

 

反射是一种晚绑定。通过程序集内的元数据和Runtime的支持在运行时读取程序集、模块、类型和成员的信息。在编码时开发者可能还不确定一些对象的信息,于作出交给代码本身,将来需要时由代码自己去获取和判断这些信息并做出相应的反应。

 

C#的反射机制只允许获取类型的公有信息,这符合面向对象的封装原则。

 

Assemble.LoadFrom用他加载的是程序集,同时将此程序集所依赖的其他程序集也加载进来,而LoadFile加载的是文件所以调用后可能缺少必要的依赖造成无法被执行。

Assemble.Load("foo")写程序集名称即可,不用后缀名

Assemble.LoadForm("foo.dll")需要写上程序集名称和后缀名

 

Vistual Studio 集成开发环境中添加引用再编译之后就能在bin/Debug目录下得到引用的程序集实体,而不是通过本地浏览去引用的,所以本来浏览的dll文件移动或删除对以后的程序运行不会产生影响,因为dll文件已经被复制了一份到需要的目录下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值