C#反射简单介绍

           #region 加载指定的程序集,并且获取该程序集中的所有的类型

            ////1.加载c:\TestLib.dll 程序集
            ////现在asm就是TestLib.dll程序集
            //Assembly asm = Assembly.LoadFile(@"c:\TestLib.dll");

            ////2.获取asm这个程序集中的所有的类型
            ////获取所有类型,包含public类型与非public类型
            //// Type[] types = asm.GetTypes();

            ////获取程序集中的所有的public的类型
            //Type[] types = asm.GetExportedTypes();//只有public类型才能获取的到。

            ////循环遍历把每个类型都输出
            //foreach (Type typeItem in types)
            //{
            //    Console.WriteLine(typeItem.Name);
            //}

            //Console.ReadKey();

            #endregion


            #region 加载程序集,获取Class1下的所有的方法

            //1.加载程序集
            Assembly asm = Assembly.LoadFile(@"c:\testlib.dll");
            //2.获取Class1这个类型
            //typeClass1就表示描述Class1类的type,里面存储的就是Class1的一些相关信息.就可以理解成是Class1的元数据
            Type typeClass1 = asm.GetType("TestLib.Class1");

            #region 获取当前类型中的所有的非protected非private方法。

            ////3.获取Class1中的所有的方法

            //MethodInfo[] minfos = typeClass1.GetMethods();

            ////4.遍历每个方法,把每个方法的名称打印出来。
            //foreach (MethodInfo methodItem in minfos)
            //{
            //    Console.WriteLine(methodItem.Name);
            //}
            //Console.ReadKey();

            #endregion

            #region 获取SayHi方法
            MethodInfo method = typeClass1.GetMethod("SayHi");

            //输出该方法名
            Console.WriteLine(method.Name);
            //创建一个Class1类型的对象
            object obj=Activator.CreateInstance(typeClass1);


            //调用该方法
            method.Invoke(obj, null);//由于SayHi方法没有参数,所以第二个参数传递一个null

            Console.ReadKey();

            #endregion

            #endregion

你可能感兴趣的:(C#反射简单介绍)