程序集和装配件是同一个概念(Assembly)
解决方案 »
- 如何判断文件夹是否已经复制完成
- C# 获取数组元素的索引
- Tcp异步网络编程,客户端断开,无限循环问题
- 求救~ 编译器错误信息: CS0246: 急急急!!!
- 如何判断用户点击的是一颗树根并且是这棵树根下的树枝?
- private bool? _flag;
- 如何判断查询的数据集为空?
- 关于加密数据库连接的问题:access
- 谁有真正的.net风格的菜单源码,带阴影的,薄边框的?
- 使用Tcp/IP通讯,TcpListener 如何取出连接上来的 TcpClient IP地址和端口
- NET中的DataGrid能不能象Delphi中的DBGrid那样,自动定位到新增加的那条数据?
- 我实现删除文本内容功能时,但不知为什么它会弹出一个对话框出来,说什么....请各位高手帮帮忙好吗,我是一个新手呀
很多人对这个概念可能还是很不清晰,对于合格的.Net程序员,有必要对这点进行澄清。
命名空间类似与Java的包,但又不完全等同,因为Java的包必须按照目录结构来放置,命名空间则不需要。 装配件是.Net应用程序执行的最小单位,编译出来的.dll、.exe都是装配件。 装配件和命名空间的关系不是一一对应,也不互相包含,一个装配件里面可以有多个命名空间,一个命名空间也可以在多个装配件中存在,这样说可能有点模糊,举个例子:
装配件A:
namespace N1
{
public class AC1 {…}
public class AC2 {…}
}
namespace N2
{
public class AC3 {…}
public class AC4{…}
}
装配件B:
namespace N1
{
public class BC1 {…}
public class BC2 {…}
}
namespace N2
{
public class BC3 {…}
public class BC4{…}
} 这两个装配件中都有N1和N2两个命名空间,而且各声明了两个类,这样是完全可以的,然后我们在一个应用程序中引用装配件A,那么在这个应用程序中,我们能看到N1下面的类为AC1和AC2,N2下面的类为AC3和AC4。
接着我们去掉对A的引用,加上对B的引用,那么我们在这个应用程序下能看到的N1下面的类变成了BC1和BC2,N2下面也一样。
如果我们同时引用这两个装配件,那么N1下面我们就能看到四个类:AC1、AC2、BC1和BC2。 到这里,我们可以清楚一个概念了,命名空间只是说明一个类型是那个族的,比如有人是汉族、有人是回族;而装配件表明一个类型住在哪里,比如有人住在北京、有人住在上海;那么北京有汉族人,也有回族人,上海有汉族人,也有回族人,这是不矛盾的。 上面我们说了,装配件是一个类型居住的地方,那么在一个程序中要使用一个类,就必须告诉编译器这个类住在哪儿,编译器才能找到它,也就是说必须引用该装配件。
那么如果在编写程序的时候,也许不确定这个类在哪里,仅仅只是知道它的名称,就不能使用了吗?答案是可以,这就是反射了,就是在程序运行的时候提供该类型的地址,而去找到它。
有兴趣的话,接着往下看吧。