c# 类的反射实例 (GetType().Invoke().GetMethod().CreateInstance())
原文:http://www.cnblogs.com/chenwei19/archive/2009/02/04/1384034.html
Class1和Form 窗体在同一个命名空间
- using System;
- using System.Collections.Generic;
- using System.Text;
- namespace fanshetest1
- {
- class Class1
- {
- private string ab="";
- public Class1(string aa)
- {
- a = aa;
- }
- public int aa(int x,int y)
- {
- return x+y+x+y;
- }
- public string bb()
- {
- return "bb";
- }
- public static string cc()
- {
- return "cc";
- }
- public string AB
- {
- get
- {
- return ab;
- }
- set
- {
- ab = value;
- }
- }
- public string a;
- }
- }
Class1和Form 窗体在不同一个命名空间
- using System;
- using System.Collections.Generic;
- using System.Text;
- namespace fanshetest1
- {
- class Class1
- {
- private string ab="";
- public Class1(string aa)
- {
- a = aa;
- }
- public int aa(int x,int y)
- {
- return x+y+x+y;
- }
- public string bb()
- {
- return "bb";
- }
- public static string cc()
- {
- return "cc";
- }
- public string AB
- {
- get
- {
- return ab;
- }
- set
- {
- ab = value;
- }
- }
- public string a;
- }
- }
下面是如何使用反射操作以上类;
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Text;
- using System.Windows.Forms;
- using System.Reflection;
- namespace fanshetest
- {
- public partial class Form1 : Form
- {
- System.Reflection.Assembly a;
- System.Reflection.Assembly b;
- public Form1()
- {
- InitializeComponent();
- a = System.Reflection.Assembly.LoadFrom("Class1.DLL");
- }
- private void button1_Click(object sender, EventArgs e)
- {
- gouzaohanshu();
- }
- //没有传参数,返回一个类型;
- private void One()
- {
- //再另建一个项目,在项目中引用上面生成的ClassLibrary1.DLL
- System.Type t = a.GetType("Class1.Class1");
- //动态生成ClassLibrary1.Class类的实例
- Object theObj = System.Activator.CreateInstance(t);
- //参数信息,GetSum需要两个string参数
- System.Type[] paramTypes = new System.Type[];
- paramTypes[] = System.Type.GetType("System.String");
- paramTypes[] = System.Type.GetType("System.String");
- //System.Reflection.MethodInfo mi = t.GetMethod("aa", paramTypes);
- System.Reflection.MethodInfo mi = t.GetMethod("bb");
- //参数值
- Object[] parameters = new Object[];
- parameters[] = ;
- parameters[] = ;
- Object returnValue = mi.Invoke(theObj, null);
- this.textBox1.Text = returnValue.ToString();
- }
- //没有返回值,调用的是直接执行函数
- private void None_void()
- {
- //再另建一个项目,在项目中引用上面生成的ClassLibrary1.DLL
- System.Type t = a.GetType("Class1.Class2");
- //动态生成ClassLibrary1.Class类的实例
- Object theObj = System.Activator.CreateInstance(t);
- //参数信息,GetSum需要两个string参数
- System.Type[] paramTypes = new System.Type[];
- //此处调用方法,如果有参数只需要在括号的后面加上"," 加上参数的type[]类型的参数
- System.Reflection.MethodInfo mi = t.GetMethod("Mes");
- Object returnValue = mi.Invoke(theObj, null);
- }
- //没有返回值,传出参数接收返回值;
- private void Two()
- {
- Type t = a.GetType("Class1.Class1");
- Object theObj = Activator.CreateInstance(t);
- Type[] types=new Type[];
- types[]=Type.GetType("System.Int32");
- types[]=Type.GetType("System.Int32");
- Object[] obj=new Object[];
- obj[]=;
- obj[]=;
- MethodInfo mi = t.GetMethod("aa",types);
- Object returnValue=mi.Invoke(theObj,obj);
- this.textBox1.Text = returnValue.ToString();
- }
- //获取同一个命名空间的反射出值
- private void Local()
- {
- Type t=Type.GetType("fanshetest1.Class1");
- //创建一个 实例
- Object theObj = Activator.CreateInstance(t);
- Type[] types=new Type[];
- types[]=Type.GetType("System.Int32");
- types[] = Type.GetType("System.Int32");
- Object[] obj = new Object[];
- obj[] = ;
- obj[] = ;
- MethodInfo mi = t.GetMethod("aa",types);
- Object returnValue = mi.Invoke(theObj,obj);
- this.textBox1.Text = returnValue.ToString();
- }
- //获取出一个属性
- private void attribute()
- {
- a = Assembly.LoadFrom("Class1.dll");
- Type t = a.GetType("Class1.Class1");
- t = Type.GetType("fanshetest1.Class1");
- Object theObj = Activator.CreateInstance(t);
- t.GetProperty("AB").SetValue(theObj,"a",null);
- this.textBox1.Text = t.GetProperty("AB").GetValue(theObj, null).ToString();
- }
- //获取出静态的函数;
- private void static_()
- {
- a = System.Reflection.Assembly.LoadFrom("Class1.dll");
- Type t = a.GetType("Class1.Class1");
- t = Type.GetType("fanshetest1.Class1");
- //创建一个实例
- Object theObj = Activator.CreateInstance(t);
- //创建一个方法的实例
- MethodInfo mi = t.GetMethod("cc");
- Object returnValue = mi.Invoke(theObj, null);
- this.textBox1.Text = returnValue.ToString();
- }
- //获取出变量;
- private void variable()
- {
- a = Assembly.LoadFrom("Class1.dll");
- Type t = a.GetType("Class1.Class1");
- t = Type.GetType("fanshetest1.Class1");
- Object theObj = Activator.CreateInstance(t);
- MethodInfo mi = t.GetMethod("a");
- t.GetField("a").SetValue(theObj,"a");
- this.textBox1.Text = t.GetField("a").GetValue(theObj).ToString();
- }
- //获取出私有变量反射值;
- private void private_()
- {
- }
- //构造函数
- private void gouzaohanshu()
- {
- Type t = a.GetType("Class1.Class1");
- t = Type.GetType("fanshetest1.Class1");
- //创建构造函数类型
- Type[] structure_Type = new Type[];
- structure_Type[] = Type.GetType("System.String");
- //定义构造函数传参类型
- Object[] structure_Obj = new Object[];
- structure_Obj[] = "aa";
- //创建一个 实例
- Object theObj = Activator.CreateInstance(t,structure_Obj);
- //MethodInfo structure_Mi = t.GetConstructor(structure_Type);
- //MethodInfo structure_Mi = t.GetMethod("Class1", structure_Type);
- //structure_Mi.Invoke(theObj, structure_Obj);
- MethodInfo mi = t.GetMethod("a");
- //t.GetField("a").SetValue(theObj, "a");
- this.textBox1.Text = t.GetField("a").GetValue(theObj).ToString();
- }
- }
- }
c# 类的反射实例 (GetType().Invoke().GetMethod().CreateInstance())的更多相关文章
- 类的反射实例(servlet的抽取)
类的反射实例 具体以后我们写的时候不用写BaseServlet,因为各种框架都已经给我们写好了 所以,user对应的servlet的界面长这样:
- java反射 实例
首先介绍几个概念: 1.Java反射的概念 反射含义:可以获取正在运行的Java对象. 2.Java反射的功能 1)可以判断运行时对象所属的类 2)可以判断运行时对象所具有的成员变量和方法 3)通过反 ...
- Java 反射 Method的invoke回调调用任意方法
Java 反射 Method的invoke回调调用任意方法 @author ixenos 关键子:Method.Field.invoke方法指针/函数指针.回调函数 invoke回调流程示例 0.由C ...
- JAVA进阶之旅(二)——认识Class类,反射的概念,Constructor,Field,Method,反射Main方法,数组的反射和实践
JAVA进阶之旅(二)--认识Class类,反射的概念,Constructor,Field,Method,反射Main方法,数组的反射和实践 我们继续聊JAVA,这次比较有意思,那就是反射了 一.认识 ...
- java--分析简单java类与反射的联系
分析简单java类与反射的联系 web对反射的操作支持 在JSP之中有一种技术--javaBean.而且在jsp里面也配套有相应的操作方式,javaBean的核心在于简单java类,于是下面演示此操作 ...
- c# 中反射里的invoke方法的参数
一个最简单的C#反射实例,首先编写类库如下: namespace ReflectionTest { public class WriteTest { //带参数的公共方法 public void Wr ...
- 类的反射_reflex
JAVA反射机制 JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为j ...
- ObjectTools反射实例
ObjectTools反射实例 package com.shitou.deposit.chinapnr.utils; import org.apache.commons.logging.Log; im ...
- JavaSE基础复习---Class类与反射机制
---恢复内容开始--- 目录: 1.java.lang.class类 2.Java中的反射机制 3.运行时与编译时概念 1. java.lang.class类 Java程序在运行时,Java运行时系 ...
随机推荐
- [转] c# 操作Word
来自 风过四季天 的原文 c# 操作Word总结 在医疗管理系统中为保存患者的体检和治疗记录,方便以后的医生或其他人查看.当把数据保存到数据库中,需要新建很多的字段,而且操作很繁琐,于是想 到网页的信 ...
- leetcode720
public class Solution { public string LongestWord(string[] words) { var maxlist = new List<string ...
- ffmpeg最简单的解码保存YUV数据 <转>
video的raw data一般都是YUV420p的格式,简单的记录下这个格式的细节,如有不对希望大家能指出. YUV图像通常有两种格式,一种是packet 还有一种是planar 从字面上 ...
- kibana-4.6.3-linux-x86_64.tar.gz的安装(图文详解)(升级)
前期博客 kibana-4.6.3-linux-x86_64.tar.gz的下载(图文详解) 因为,我的机器情况是如下: 1.上传 [hadoop@master app]$ rz [hadoop@m ...
- 添加 MyEclipse Persistence Tools 类库
1).右键点击你的项目,然后选择Properties.2).在 Java Build Path 页面, 在 Libraries 面板下选择 Add Library….3).选择 MyEclipse L ...
- Zookeeper使用--开源客户端
一.ZkClient ZkClient是在Zookeeper原生API接口之上进行了包装,是一个更易用的Zookeeper客户端,其内部还实现了诸如Session超时重连.Watcher反复注册等功能 ...
- [C++] CONST 2
The C++ 'const' Declaration: Why & How The 'const' system is one of the really messy features of ...
- 解决ImportError: libmysqlclient_r.so.16: cannot open shared object file-乾颐堂
在开发一个python项目是,需要用到mysql,但是, 安装完mysql-python后import加载模块提示以下错误: ImportError: libmysqlclient_r.so.16: ...
- zigbee广播通信原理
广播:可以理解成,发送模块发出数据,这个网络里的所有节点模块都可以拿到这个数据. 实验:终端模块以广播的形式发送出去,让协调器和路由器模块作为接收器收到数据并显示出来! 协调器模块作为接收模块: 和单 ...
- Photo4
Story: 我手捧玫瑰,一个人,走在桥上.桥下是波澜壮阔的大海,一不小心,我就有失足的危险.海鸟的低鸣在我耳际盘旋着,浪汹涌,仿佛要把我吞噬掉.你也许奇怪,为何我一人手捧玫瑰走在桥上.只因,女骑从来 ...