VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > c#教程 >
  • C#教程之C#教程之c# 类的反射实例 (GetType().Invoke().GetMetho

本站最新发布   C#从入门到精通
试听地址  
https://www.xin3721.com/eschool/CSharpxin3721/

原文: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 }
复制代码

相关教程