Assembly(c#中简单说明)
2008-07-11 00:27

什么是Assembly(程序集)?
Assembly是一个包含来程序的名称,版本号,自我描述,文件关联关系和文件位置等信息的一个集合。在.net框架中通过Assembly类来支持,该类位于System.Reflection下,物理位置位于:mscorlib.dll。

Assembly能干什么?
我们可以通过Assembly的信息来获取程序的类,实例等编程需要用到的信息。

一个简单的演示实例:
1.建立一个Console工程名为:NamespaceRef
2.写入如下代码:

1using System;
2using System.Collections.Generic;
3using System.Text;
4using System.Reflection;
5
6namespace NamespaceRef
7{
8    class Program
9    {
10        static void Main(string[] args)
11        {
12             Country cy;
13             String assemblyName = @"NamespaceRef";
14            string strongClassName = @"NamespaceRef.China";
15            // 注意:这里类名必须为强类名
16            // assemblyName可以通过工程的AssemblyInfo.cs中找到
17             cy = (Country)Assembly.Load(assemblyName).CreateInstance(strongClassName);
18             Console.WriteLine(cy.name);
19             Console.ReadKey();
20         }
21     }
22
23    class Country
24    {
25        public string name;
26     }
27
28    class Chinese : Country
29    {
30        public Chinese()
31        {
32             name = "你好";
33         }
34     }
35
36    class America : Country
37    {
38        public America()
39        {
40             name = "Hello";
41         }
42     }
43}

由于Assembly的存在给我们在实现设计模式上有了一个更好的选择。
我们在开发的时候有时候会遇到这样的一个问题,根据对应的名称来创建指定的对象。如:给出chinese就要创建一个chinese对象,以前我们只能这样来写代码:

1if (strongClassName == "China")
2     cy = new China();
3else if (strongClassName == "America")
4     cy = new America();

那么如果我们有很长的一系列对象要创建,这样的代码维护起来是很困难的,而且也不容易阅读。现在我们可以通过在外部文件定义类的程序集名称和类的强名称来获得这样一个实例,即易于理解,又增强了扩展性还不用修改代码。
cy = (Country)Assembly.Load(assemblyName).CreateInstance(strongClassName);

结论
Assembly类有很多的方法和属性,它和Type一样有很多功能用于名称与方法和属性之间的转化。深入理解这两个类,你就可以清晰通用语言层是如何工作。

最新文章

  1. MySQL外键约束
  2. windows与linux之间文件的传输方式总结(转)
  3. CSS--值和单位
  4. mysql简单介绍
  5. 负载均衡服务器session共享的解决方案
  6. Create a simple js-ctypes example
  7. java中classPath和Xpath问题
  8. unity脚本运行顺序具体的解释
  9. POJ 1565 Skew Binary(简单的问题)
  10. Windows系统下八大具有高逼格的DOS命令之一【ping】
  11. ASP.NET Web API编程——路由
  12. ●BZOJ 4665 小w的喜糖
  13. 大二学生党的Security+备考宝典(一次过)
  14. JSTL配置文件下载地址
  15. 053 kafka自带的生产者与消费者测试
  16. CC2530 Debug ---CC2530 无启动之32K晶振
  17. greendao3.2.0使用
  18. JS 8-3 prototype属性
  19. PHP字符串offset取值特性
  20. mysql 导入csv 转义

热门文章

  1. (原创)舌尖上的c++--相逢
  2. sbt打包Scala写的Spark程序,打包正常,提交运行时提示找不到对应的类
  3. python3.5 连接mysql
  4. Mongo分片集群脚本
  5. virtualbox 安装 USB 扩展功能
  6. python 3 操作mysql数据库的方法
  7. C#中[] 、List、Array、ArrayList等数据结构的差异简述
  8. 如何提高JavaScript代码质量
  9. QPushButton取消按压后文字下沉效果
  10. CentOS 7系统LAMP配置PHP-FPM的示例