原文: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())的更多相关文章

  1. 类的反射实例(servlet的抽取)

    类的反射实例 具体以后我们写的时候不用写BaseServlet,因为各种框架都已经给我们写好了 所以,user对应的servlet的界面长这样:

  2. java反射 实例

    首先介绍几个概念: 1.Java反射的概念 反射含义:可以获取正在运行的Java对象. 2.Java反射的功能 1)可以判断运行时对象所属的类 2)可以判断运行时对象所具有的成员变量和方法 3)通过反 ...

  3. Java 反射 Method的invoke回调调用任意方法

    Java 反射 Method的invoke回调调用任意方法 @author ixenos 关键子:Method.Field.invoke方法指针/函数指针.回调函数 invoke回调流程示例 0.由C ...

  4. JAVA进阶之旅(二)——认识Class类,反射的概念,Constructor,Field,Method,反射Main方法,数组的反射和实践

    JAVA进阶之旅(二)--认识Class类,反射的概念,Constructor,Field,Method,反射Main方法,数组的反射和实践 我们继续聊JAVA,这次比较有意思,那就是反射了 一.认识 ...

  5. java--分析简单java类与反射的联系

    分析简单java类与反射的联系 web对反射的操作支持 在JSP之中有一种技术--javaBean.而且在jsp里面也配套有相应的操作方式,javaBean的核心在于简单java类,于是下面演示此操作 ...

  6. c# 中反射里的invoke方法的参数

    一个最简单的C#反射实例,首先编写类库如下: namespace ReflectionTest { public class WriteTest { //带参数的公共方法 public void Wr ...

  7. 类的反射_reflex

    JAVA反射机制 JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为j ...

  8. ObjectTools反射实例

    ObjectTools反射实例 package com.shitou.deposit.chinapnr.utils; import org.apache.commons.logging.Log; im ...

  9. JavaSE基础复习---Class类与反射机制

    ---恢复内容开始--- 目录: 1.java.lang.class类 2.Java中的反射机制 3.运行时与编译时概念 1. java.lang.class类 Java程序在运行时,Java运行时系 ...

随机推荐

  1. 取消Eclipse的js校验功能

    1 window>>preferences>>javascript>>validator>>Error/warnings 去掉 Enable Javas ...

  2. vs2012 未找到与约束 ContractName Microsoft.VisualStudio.Utilities.IContentTy...

    错误的大致内容,不能加载某个文件,需要修改web.config文件或者重命名新建.... 周末360大神帮我修复了一下电脑,然而,这一修复导致周一早上的一连串状况, 以上就是错误本尊,刚开始以为同事提 ...

  3. Codeforces 76D 位运算

    题意:给你两个数x 和 y, x = a + b, y = a XOR b,问有没有合法的a和b满足这个等式? 思路:有恒等式: a + b = ((a & b) << 1) + ...

  4. Spring Data JPA动态查询(多条件and)

    entity: @Entity @Table(name = "data_illustration") public class Test { @Id @GenericGenerat ...

  5. 第十一条理解objc_masgSend的作用

    Objetive-C最基本的的东西就是它的消息机制.Objective-C运行时的最基本的东西就是 objc_msgSend, 它就是负责发送一个消息给对象的C函数.   当你写下面这样的代码时:   ...

  6. 从顶端插入,滚动展示(Demo):

    新闻滚动,从顶端插入: <!DOCTYPE html> <html> <head> <script src="/jquery/jquery-1.11 ...

  7. 344. Reverse String 最基础的反转字符串

    [抄题]: [暴力解法]: 时间分析: 空间分析: [奇葩输出条件]: [奇葩corner case]: [思维问题]: 还停留在 i < len / 2的阶段,不行,应该是指针对撞问题了 [一 ...

  8. 530.Minimum Absolute Difference in BST 二叉搜索树中的最小差的绝对值

    [抄题]: Given a binary search tree with non-negative values, find the minimum absolute difference betw ...

  9. RTX二次开发::检索 COM 类工厂中 CLSID 为 {79210E58-99EB-45D0-8890-763EFEAA143F} 的组件失败,

    解决方法: 1.Interop.RTXSAPILib.dll这个是32位的 将IIS 应用程序池 启用32位应用程序 设置为true就可以了, 2.把编译好的程序选择X86平台运行,就好了 程序员的基 ...

  10. loadrunner12-添加集合点

    1.首先添加集合点之前要插入事务,集合点和事务通常是一起使用的,单独使用集合点,基本上可以说是没有意义的. 2.在开始事务之前 ,插入一个“集合点”,那么在多用户执行时,就可以将用户请求停下来,直到用 ...