22
2012
07

c#利用反射Assembly 对类和成员属性进行操作

        protected static void test()
        {
            //获取程序集
            Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();//Assembly.LoadFrom("test.dll"); 
            //获取模块
            Module[] modules = assembly.GetModules();
            foreach (Module module in modules)
            {
                Console.WriteLine("module name:" + module.Name);
            } 
            //获取类
            Type type = assembly.GetType("Reflect_test.PurchaseOrderHeadManageModel", true, true); //命名空间名称 + 类名
            //创建类的实例
            object obj = Activator.CreateInstance(type, true);
            //获取私有字段
            FieldInfo[] myfields = type.GetFields(BindingFlags.NonPublic | BindingFlags.IgnoreCase | BindingFlags.Instance);
            for (int i = 0; i < myfields.Length; i++)
            {
                Console.WriteLine("字段名:{0},类型:{1}", myfields[i].Name, myfields[i].FieldType);
            }
            //获取公共属性
            PropertyInfo[] Propertys = type.GetProperties();
            for (int i = 0; i < Propertys.Length; i++)
            {
               // Propertys[i].SetValue(Propertys[i], i, null); //设置值
               // Propertys[i].GetValue(Propertys[i],null); //获取值
                Console.WriteLine("属性名:{0},类型:{1}",Propertys[i].Name,Propertys[i].PropertyType);
            }
            //构造函数集合
            ConstructorInfo[] myconstructors = type.GetConstructors();
            foreach (ConstructorInfo csinfo in myconstructors)
            {
                Console.WriteLine("ConstructorInfo:{0}",csinfo.Name);
                foreach (ParameterInfo pinfo in csinfo.GetParameters())//构造函数参数列表
                {
                    Console.WriteLine("Parameter:{0},{1}", pinfo.Name,pinfo.ParameterType);
                }
            }
            //公共方法,包括属性
            MethodInfo[] methods = type.GetMethods();
            foreach (MethodInfo method in methods)
            {
                //IsSpecialName:是否是属性
                if (!method.IsSpecialName) 
                {
                   // Console.WriteLine("类型:" + method.Attributes);
                    Console.WriteLine("method name:" + method.Name);
                }
            }
            
            //调用静态方法
            int result = (int)type.InvokeMember("StaticPlus", BindingFlags.InvokeMethod, null, null, new object[] {2,3 });
            Console.WriteLine("调用静态方法-结果是:{0}",result);
            //调用非静态方法
            result = (int)type.InvokeMember("Plus", BindingFlags.InvokeMethod, null, obj, new object[] { 3, 4 });
            Console.WriteLine("调用非静态方法-结果是:{0}",result);
             EventInfo[] Myevents=type.GetEvents();
             foreach (EventInfo einfo in Myevents)
             {
                 Console.WriteLine("事件:{0}", einfo.Name);
             }
        }





版权声明:
作者:真爱无限 出处:http://www.pukuimin.top 本文为博主原创文章版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接.
« 上一篇下一篇 »

相关文章:

评论列表:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。