码迷,mamicode.com
首页 > 其他好文 > 详细

反射簡單應用例子[轉]

时间:2016-03-10 10:50:35      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:

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

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

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

2技术分享using System.Collections.Generic;
3技术分享using System.Text;
4技术分享using System.Reflection;
5技术分享
6技术分享namespace 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对象,以前我们只能这样来写代码:

= new China();
3技术分享else if (strongClassName == "America")
4技术分享     cy = new America();

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

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

http://www.cnblogs.com/muou/archive/2009/07/08/1518971.html

反射簡單應用例子[轉]

标签:

原文地址:http://www.cnblogs.com/sdya/p/5260783.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!