反射的使用总结

来源:互联网 发布:js input file 赋值 编辑:程序博客网 时间:2024/04/30 13:28

情形一:生成类的实例

   1、知道一个类的类型,生成该类的实例 

       public void  CreatInstance(Type T)

       {

              ObjectClass obj=(ObjectClass)Activator.CreateInstance(T,para[])//para为类构造函数的参数

       }

   2、知道类名,生成类的实例

        public void  CreatInstance()

       {

              Type t=typeof(ObjectClass)

              ObjectClass obj=(ObjectClass)Activator.CreateInstance(T,para[])//para为类构造函数的参数

       }

   3、知道一个dll,生成dll中的类的实例

        public void  CreatInstance(Type T)

        {

              Assembly ass=Assembly.LoadForm("Class.dll")

              foreach(Type t in ass.GetTypes())

              {

                  ObjectClass obj=(ObjectClass)Activator.CreateInstance(t,para[])//para为类构造函数的参数

              }

              //或者通过ass指定类名称

              // ObjectClass obj=(ObjectClass)ass.CreateInstance("名字空间.类名")//注意此时的程序集名称和

                                                                                                                        //默认名字空间名称一致

          }

 

情形二:获取类中的成员方法,属性和字段

          public void ReflectorMethod()

          {

              ObjectClass obj=new ObjectClass();

               Type t=Typeof(obj);

 

               MethodInfo []methodInfo=t.GetMethods();//获取所有公共方法

               MethodInfo method=t.GetMethod("Method");//获取特定方法

               Object[] para={"para1","para2"};

               method.Invoke(obj,para);//带参方法的调用

               method.Invoke(null,para);//静态带参方法的调用

               method.Invoke(obj,null);//不带参数方法的调用

               MethodInfo privateMethod=t.GetMethod

                                                           ("PrivateMethod",BindingFlags.Instance|BindingFlags.NonPublic)

              

               PropertyInfo pro=a.GetProperty("property1");//获取属性

               pro.GetValue(obj,null);//获取属性的值

               pro.SetValue(obj,value,null);//设置属性的值,属性类型不定故value类型不定

              

               FiledInfo field=a.GetField("field");//获取字段

               field.getValue(obj);//获取字段的值

              

            }