原文:http://www.cnblogs.com/chenwei19/archive/2009/02/04/1384034.html
Class1和Form 窗体在同一个命名空间
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 窗体在不同一个命名空间
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 }
下面是如何使用反射操作以上类;
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 }