分享

反射(转)

 牛人的尾巴 2015-10-28

反射(转)- 3

(2010-05-05 15:49:38)
标签:

杂谈

分类: C#
④动态创建对象实例【经典】
是实现抽象工厂的基础,也是实现抽象工厂的核心技术,通过它,可以动态创建一个你想要的对象.如下面的例子是演示如何动态创建ChineseName或EnglishName的实例

 
 1反射(转)- <wbr>3using System;
 2反射(转)- <wbr>3using System.Reflection;
 3反射(转)- <wbr>3namespace TestReflection
 4反射(转)- <wbr>3{
 5反射(转)- <wbr>3    class AXzhz_sReflectionExample
 6反射(转)- <wbr>3    {
 7反射(转)- <wbr>3        public static void Main()
 8反射(转)- <wbr>3        {
 9反射(转)- <wbr>3            IName name=AbstractFactory.GetName();
10反射(转)- <wbr>3            name.ShowName();
11反射(转)- <wbr>3        }
12反射(转)- <wbr>3    }
13反射(转)- <wbr>3
14反射(转)- <wbr>3    public class AbstractFactory
15反射(转)- <wbr>3    {
16反射(转)- <wbr>3        public static IName GetName()
17反射(转)- <wbr>3        {
18反射(转)- <wbr>3            //s的值以后从Web.config动态获取
19反射(转)- <wbr>3            //把s赋值为:TestReflection.EnglishName,将显示英文名
20反射(转)- <wbr>3            string "TestReflection.ChineseName";
21反射(转)- <wbr>3            IName name (IName)Assembly.Load("TestReflection").CreateInstance(s);
22反射(转)- <wbr>3            return name;
23反射(转)- <wbr>3        }
24反射(转)- <wbr>3    }
25反射(转)- <wbr>3    
26反射(转)- <wbr>3    //声明一个接口,它有一个显示"名字"的功能
27反射(转)- <wbr>3    public interface IName
28反射(转)- <wbr>3    {
29反射(转)- <wbr>3        void ShowName();
30反射(转)- <wbr>3    }
31反射(转)- <wbr>3
32反射(转)- <wbr>3    //实现接口,显示中国名字
33反射(转)- <wbr>3    public class ChineseName IName
34反射(转)- <wbr>3    {
35反射(转)- <wbr>3        public void ShowName()
36反射(转)- <wbr>3        {
37反射(转)- <wbr>3            Console.WriteLine("我叫AX!");
38反射(转)- <wbr>3            Console.ReadLine();
39反射(转)- <wbr>3        }
40反射(转)- <wbr>3    }
41反射(转)- <wbr>3
42反射(转)- <wbr>3    //实现接口,显示英国名字
43反射(转)- <wbr>3    public class EnglishName:IName
44反射(转)- <wbr>3    {
45反射(转)- <wbr>3        void IName.ShowName()
46反射(转)- <wbr>3        {
47反射(转)- <wbr>3            Console.WriteLine("My name is AXzhz!");
48反射(转)- <wbr>3            Console.ReadLine();
49反射(转)- <wbr>3        }
50反射(转)- <wbr>3    }
51反射(转)- <wbr>3}

⑤获得整个解决方案的所有Assembly(这个有点用)
如果你不太清楚自己的解决方案中都用到了哪些Assembly,可以使用下面的方法,如果再想得到Assembly里的信息,见③

 1反射(转)- <wbr>3using System;
 2反射(转)- <wbr>3using System.Reflection;
 3反射(转)- <wbr>3
 4反射(转)- <wbr>3namespace TestReflection
 5反射(转)- <wbr>3{
 6反射(转)- <wbr>3    class ShowAllAssembly
 7反射(转)- <wbr>3    {
 8反射(转)- <wbr>3        public static void Main()
 9反射(转)- <wbr>3        {
10反射(转)- <wbr>3            //获得解决方案的所有Assembly
11反射(转)- <wbr>3            Assembly[] AX AppDomain.CurrentDomain.GetAssemblies();
12反射(转)- <wbr>3            //遍历显示每个Assembly的名字
13反射(转)- <wbr>3            foreach (object var in AX)
14反射(转)- <wbr>3            {
15反射(转)- <wbr>3                Console.WriteLine("Assembly的名字:"+var.ToString());                
16反射(转)- <wbr>3            }
17反射(转)- <wbr>3            //使用一个已知的Assembly名称,来创建一个Assembly
18反射(转)- <wbr>3            //通过CodeBase属性显示最初指定的程序集的位置
19反射(转)- <wbr>3            Console.WriteLine("最初指定的程序集TestReflection的位置:" Assembly.Load("TestReflection").CodeBase);
20反射(转)- <wbr>3            Console.ReadLine();
21反射(转)- <wbr>3        }
22反射(转)- <wbr>3    }
23反射(转)- <wbr>3}
24反射(转)- <wbr>3
  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多