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

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

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

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

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

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

1C#提供-------AttributeUsage使用-LMLPHPif (strongClassName == "China")
2C#提供-------AttributeUsage使用-LMLPHP     cy = new China();
3C#提供-------AttributeUsage使用-LMLPHPelse if (strongClassName == "America")
4C#提供-------AttributeUsage使用-LMLPHP     cy = new America();

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

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

05-11 14:46