使用Assembly来开发C#程序

什么是Assembly(程序集)?

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

 

Assembly能干什么?

我们可以通过Assembly的信息来获取程序的类,实例等编程需要用到的信息。使用Assembly定义和加载程序集,加载在程序集清单中列出的模块,以及从此程序集中查找类型并创建该类型的实例。定义一个Assembly,它是可重用,无版本冲突并且可以自我描述的公共语言运行库应用程序构造块。

如果,我要创建一个类的实例,必须知道该类的命名空间(这个一般都知道)+程序集(这个很容易被我们忽略,因为一般我们不需要引用外部和程序集,如果用c#做过Excel文件的导入导出,就会知道必须添加一个Excel相关的程序集引用)

 

一个简单的演示实例:
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对象,以前我们只能这样来写代码:

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值