zoukankan      html  css  js  c++  java
  • c# 类的反射实例 (GetType().Invoke().GetMethod().CreateInstance())

    原文: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 }
  • 相关阅读:
    初学者一些常用的SQL语句(一)
    java小知识
    ArrayList底层实现原理
    JVM原理
    一个简单的登陆注册页面(希望可以帮到您)
    数据结构
    C++/C
    C的函数指针与指针函数
    函数指针与指针函数
    对数据库通用性的更新操作(ssh)
  • 原文地址:https://www.cnblogs.com/0-0snail/p/9258226.html
Copyright © 2011-2022 走看看