c# 类的反射实例 (GetType().Invoke().GetMethod().CreateInstance())

Class1和Form 窗体在同一个命名空间

[c-sharp] view plaincopy
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Text;  
  4. namespace fanshetest1  
  5. {  
  6.     class Class1  
  7.     {  
  8.         private string ab="1";  
  9.         public Class1(string aa)  
  10.         {  
  11.             a = aa;  
  12.         }  
  13.         public int  aa(int x,int y)  
  14.         {  
  15.             return x+y+x+y;  
  16.         }  
  17.         public string bb()  
  18.         {  
  19.             return "bb";  
  20.         }  
  21.         public static string cc()  
  22.         {  
  23.             return "cc";  
  24.         }  
  25.         public string AB  
  26.         {  
  27.             get  
  28.             {  
  29.                 return ab;  
  30.             }  
  31.             set  
  32.             {  
  33.                 ab = value;  
  34.             }  
  35.         }  
  36.         public string a;  
  37.     }  
  38. }  
 

 

Class1和Form 窗体在不同一个命名空间

 

[c-sharp] view plaincopy
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Text;  
  4. namespace fanshetest1  
  5. {  
  6.     class Class1  
  7.     {  
  8.         private string ab="1";  
  9.         public Class1(string aa)  
  10.         {  
  11.             a = aa;  
  12.         }  
  13.         public int  aa(int x,int y)  
  14.         {  
  15.             return x+y+x+y;  
  16.         }  
  17.         public string bb()  
  18.         {  
  19.             return "bb";  
  20.         }  
  21.         public static string cc()  
  22.         {  
  23.             return "cc";  
  24.         }  
  25.         public string AB  
  26.         {  
  27.             get  
  28.             {  
  29.                 return ab;  
  30.             }  
  31.             set  
  32.             {  
  33.                 ab = value;  
  34.             }  
  35.         }  
  36.         public string a;  
  37.     }  
  38. }  
 

 

下面是如何使用反射操作以上类;

[c-sharp] view plaincopy
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.ComponentModel;  
  4. using System.Data;  
  5. using System.Drawing;  
  6. using System.Text;  
  7. using System.Windows.Forms;  
  8. using System.Reflection;  
  9. namespace fanshetest  
  10. {  
  11.     public partial class Form1 : Form  
  12.     {  
  13.         System.Reflection.Assembly a;  
  14.         System.Reflection.Assembly b;  
  15.         public Form1()  
  16.         {  
  17.             InitializeComponent();  
  18.             a = System.Reflection.Assembly.LoadFrom("Class1.DLL");  
  19.         }  
  20.         private void button1_Click(object sender, EventArgs e)  
  21.         {  
  22.             gouzaohanshu();  
  23.              
  24.         }  
  25.        //没有传参数,返回一个类型;  
  26.         private void One()  
  27.         {  
  28.             //再另建一个项目,在项目中引用上面生成的ClassLibrary1.DLL  
  29.             System.Type t = a.GetType("Class1.Class1");  
  30.             //动态生成ClassLibrary1.Class类的实例  
  31.             Object theObj = System.Activator.CreateInstance(t);  
  32.             //参数信息,GetSum需要两个string参数  
  33.             System.Type[] paramTypes = new System.Type[2];  
  34.             paramTypes[0] = System.Type.GetType("System.String");  
  35.             paramTypes[1] = System.Type.GetType("System.String");  
  36.             //System.Reflection.MethodInfo mi = t.GetMethod("aa", paramTypes);  
  37.             System.Reflection.MethodInfo mi = t.GetMethod("bb");  
  38.             //参数值  
  39.             Object[] parameters = new Object[2];  
  40.             parameters[0] = 3;  
  41.             parameters[1] = 4;  
  42.             Object returnValue = mi.Invoke(theObj, null);  
  43.             this.textBox1.Text = returnValue.ToString();  
  44.         }  
  45.         //没有返回值,调用的是直接执行函数  
  46.         private void None_void()  
  47.         {  
  48.             //再另建一个项目,在项目中引用上面生成的ClassLibrary1.DLL  
  49.             System.Type t = a.GetType("Class1.Class2");  
  50.             //动态生成ClassLibrary1.Class类的实例  
  51.             Object theObj = System.Activator.CreateInstance(t);  
  52.             //参数信息,GetSum需要两个string参数  
  53.             System.Type[] paramTypes = new System.Type[2];  
  54.             //此处调用方法,如果有参数只需要在括号的后面加上"," 加上参数的type[]类型的参数  
  55.             System.Reflection.MethodInfo mi = t.GetMethod("Mes");  
  56.             Object returnValue = mi.Invoke(theObj, null);  
  57.         }  
  58.         //没有返回值,传出参数接收返回值;  
  59.         private void Two()  
  60.         {  
  61.             Type t = a.GetType("Class1.Class1");  
  62.             Object theObj = Activator.CreateInstance(t);  
  63.             Type[] types=new Type[2];  
  64.             types[0]=Type.GetType("System.Int32");  
  65.             types[1]=Type.GetType("System.Int32");  
  66.             Object[] obj=new Object[2];  
  67.             obj[0]=2;  
  68.             obj[1]=3;  
  69.             MethodInfo mi = t.GetMethod("aa",types);  
  70.            Object returnValue=mi.Invoke(theObj,obj);  
  71.            this.textBox1.Text = returnValue.ToString();  
  72.         }  
  73.         //获取同一个命名空间的反射出值  
  74.         private void Local()  
  75.         {  
  76.             Type t=Type.GetType("fanshetest1.Class1");  
  77.             //创建一个 实例  
  78.             Object theObj = Activator.CreateInstance(t);  
  79.             Type[] types=new Type[2];  
  80.             types[0]=Type.GetType("System.Int32");  
  81.             types[1] = Type.GetType("System.Int32");  
  82.             Object[] obj = new Object[2];  
  83.             obj[0] = 2;  
  84.             obj[1] = 3;  
  85.             MethodInfo mi = t.GetMethod("aa",types);  
  86.             Object returnValue = mi.Invoke(theObj,obj);  
  87.             this.textBox1.Text = returnValue.ToString();  
  88.         }  
  89.         //获取出一个属性  
  90.         private void attribute()  
  91.         {  
  92.             a = Assembly.LoadFrom("Class1.dll");  
  93.             Type t = a.GetType("Class1.Class1");  
  94.             t = Type.GetType("fanshetest1.Class1");  
  95.             Object theObj = Activator.CreateInstance(t);  
  96.             t.GetProperty("AB").SetValue(theObj,"a",null);  
  97.             this.textBox1.Text = t.GetProperty("AB").GetValue(theObj, null).ToString();  
  98.         }  
  99.         //获取出静态的函数;  
  100.         private void static_()  
  101.         {  
  102.             a = System.Reflection.Assembly.LoadFrom("Class1.dll");  
  103.             Type t = a.GetType("Class1.Class1");  
  104.             t = Type.GetType("fanshetest1.Class1");  
  105.             //创建一个实例  
  106.             Object theObj = Activator.CreateInstance(t);  
  107.             //创建一个方法的实例  
  108.             MethodInfo mi = t.GetMethod("cc");  
  109.             Object returnValue = mi.Invoke(theObj, null);  
  110.             this.textBox1.Text = returnValue.ToString();  
  111.         }  
  112.         //获取出变量;  
  113.         private void variable()  
  114.         {  
  115.             a = Assembly.LoadFrom("Class1.dll");  
  116.             Type t = a.GetType("Class1.Class1");  
  117.             t = Type.GetType("fanshetest1.Class1");  
  118.             Object theObj = Activator.CreateInstance(t);  
  119.             MethodInfo mi = t.GetMethod("a");  
  120.             t.GetField("a").SetValue(theObj,"a");  
  121.             this.textBox1.Text = t.GetField("a").GetValue(theObj).ToString();  
  122.         }  
  123.         //获取出私有变量反射值;  
  124.         private void private_()  
  125.         {   
  126.               
  127.         }  
  128.         //构造函数  
  129.         private void gouzaohanshu()  
  130.         {  
  131.             Type t = a.GetType("Class1.Class1");  
  132.             t = Type.GetType("fanshetest1.Class1");  
  133.             //创建构造函数类型  
  134.             Type[] structure_Type = new Type[1];  
  135.             structure_Type[0] = Type.GetType("System.String");  
  136.             //定义构造函数传参类型  
  137.             Object[] structure_Obj = new Object[1];  
  138.             structure_Obj[0] = "aa";  
  139.             //创建一个 实例  
  140.             Object theObj = Activator.CreateInstance(t,structure_Obj);  
  141.             //MethodInfo structure_Mi = t.GetConstructor(structure_Type);  
  142.             //MethodInfo structure_Mi = t.GetMethod("Class1", structure_Type);  
  143.             //structure_Mi.Invoke(theObj, structure_Obj);  
  144.             MethodInfo mi = t.GetMethod("a");  
  145.             //t.GetField("a").SetValue(theObj, "a");  
  146.             this.textBox1.Text = t.GetField("a").GetValue(theObj).ToString();  
  147.         }  
  148.     }  
  149. }  

你可能感兴趣的:(.NET技术-C#)