C#反射示例代码

  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 delegate void bb(string str);  
  12.     public partial class Form1 : Form  
  13.     {  
  14.          
  15.         System.Reflection.Assembly a;  
  16.         System.Reflection.Assembly b;  
  17.         public Form1()  
  18.         {  
  19.             InitializeComponent();  
  20.             a = System.Reflection.Assembly.LoadFrom("Class1.DLL");  
  21.         }  
  22.         private void button1_Click(object sender, EventArgs e)  
  23.         {  
  24.             One();  
  25.         }                                                                                          
  26.        //没有传参数,返回一个类型;  
  27.         private void One()  
  28.         {  
  29.             //再另建一个项目,在项目中引用上面生成的ClassLibrary1.DLL  
  30.             System.Type t = a.GetType("Class1.Class1");  
  31.             //动态生成ClassLibrary1.Class类的实例  
  32.             Object theObj = System.Activator.CreateInstance(t);  
  33.             //参数信息,GetSum需要两个string参数  
  34.             //System.Type[] paramTypes = new System.Type[2];  
  35.             //paramTypes[0] = System.Type.GetType("System.String");  
  36.             //paramTypes[1] = System.Type.GetType("System.String");  
  37.             //System.Reflection.MethodInfo mi = t.GetMethod("aa", paramTypes);  
  38.             System.Reflection.MethodInfo mi = t.GetMethod("bb");  
  39.             //参数值  
  40.             //Object[] parameters = new Object[2];  
  41.             //parameters[0] = 3;  
  42.             //parameters[1] = 4;  
  43.             Object returnValue = mi.Invoke(theObj, null);  
  44.             this.textBox1.Text = returnValue.ToString();  
  45.         }  
  46.         //没有返回值,调用的是直接执行函数  
  47.         private void None_void()  
  48.         {  
  49.             //再另建一个项目,在项目中引用上面生成的ClassLibrary1.DLL  
  50.             System.Type t = a.GetType("Class1.Class2");  
  51.             //动态生成ClassLibrary1.Class类的实例  
  52.             Object theObj = System.Activator.CreateInstance(t);  
  53.             //参数信息,GetSum需要两个string参数  
  54.             System.Type[] paramTypes = new System.Type[2];  
  55.             //此处调用方法,如果有参数只需要在括号的后面加上"," 加上参数的type[]类型的参数  
  56.             System.Reflection.MethodInfo mi = t.GetMethod("Mes");  
  57.             Object returnValue = mi.Invoke(theObj, null);  
  58.         }  
  59.         //没有返回值,传出参数接收返回值;  
  60.         private void Two()  
  61.         {  
  62.             Type t = a.GetType("Class1.Class1");  
  63.             Object theObj = Activator.CreateInstance(t);  
  64.             Type[] types=new Type[2];  
  65.             types[0]=Type.GetType("System.Int32");  
  66.             types[1]=Type.GetType("System.Int32");  
  67.             Object[] obj=new Object[2];  
  68.             obj[0]=2;  
  69.             obj[1]=3;  
  70.             MethodInfo mi = t.GetMethod("aa",types);  
  71.            Object returnValue=mi.Invoke(theObj,obj);  
  72.            this.textBox1.Text = returnValue.ToString();  
  73.         }  
  74.         //获取同一个命名空间的反射出值  
  75.         private void Local()  
  76.         {  
  77.             Type t=Type.GetType("fanshetest1.Class1");  
  78.             //创建一个 实例  
  79.             Object theObj = Activator.CreateInstance(t);  
  80.             Type[] types=new Type[2];  
  81.             types[0]=Type.GetType("System.Int32");  
  82.             types[1] = Type.GetType("System.Int32");  
  83.             Object[] obj = new Object[2];  
  84.             obj[0] = 2;  
  85.             obj[1] = 3;  
  86.             MethodInfo mi = t.GetMethod("aa",types);  
  87.             Object returnValue = mi.Invoke(theObj,obj);  
  88.             this.textBox1.Text = returnValue.ToString();  
  89.         }  
  90.         //获取出一个属性  
  91.         private void attribute()  
  92.         {  
  93.             a = Assembly.LoadFrom("Class1.dll");  
  94.             Type t = a.GetType("Class1.Class1");  
  95.             t = Type.GetType("fanshetest1.Class1");  
  96.             Object theObj = Activator.CreateInstance(t);  
  97.             t.GetProperty("AB").SetValue(theObj,"a",null);  
  98.             this.textBox1.Text = t.GetProperty("AB").GetValue(theObj, null).ToString();  
  99.         }  
  100.         //获取出静态的函数;  
  101.         private void static_()  
  102.         {  
  103.             a = System.Reflection.Assembly.LoadFrom("Class1.dll");  
  104.             Type t = a.GetType("Class1.Class1");  
  105.             t = Type.GetType("fanshetest1.Class1");  
  106.             //创建一个实例  
  107.             Object theObj = Activator.CreateInstance(t);  
  108.             //创建一个方法的实例  
  109.             MethodInfo mi = t.GetMethod("cc");  
  110.             Object returnValue = mi.Invoke(theObj, null);  
  111.             this.textBox1.Text = returnValue.ToString();  
  112.         }  
  113.         //获取出变量;  
  114.         private void variable()  
  115.         {  
  116.             a = Assembly.LoadFrom("Class1.dll");  
  117.             Type t = a.GetType("Class1.Class1");  
  118.             t = Type.GetType("fanshetest1.Class1");  
  119.             Object theObj = Activator.CreateInstance(t);  
  120.             MethodInfo mi = t.GetMethod("a");  
  121.             t.GetField("a").SetValue(theObj,"a");  
  122.             this.textBox1.Text = t.GetField("a").GetValue(theObj).ToString();  
  123.         }  
  124.         //获取出私有变量反射值;  
  125.         private void private_()  
  126.         {   
  127.               
  128.         }  
  129.         //构造函数  
  130.         private void gouzaohanshu()  
  131.         {  
  132.             Type t = a.GetType("Class1.Class1");  
  133.             t = Type.GetType("fanshetest1.Class1");  
  134.             //创建构造函数类型  
  135.             Type[] structure_Type = new Type[1];  
  136.             structure_Type[0] = Type.GetType("System.String");  
  137.             //定义构造函数传参类型  
  138.             Object[] structure_Obj = new Object[1];  
  139.             structure_Obj[0] = "aa";  
  140.             //创建一个 实例  
  141.             Object theObj = Activator.CreateInstance(t,structure_Obj);  
  142.             //MethodInfo structure_Mi = t.GetConstructor(structure_Type);  
  143.             //MethodInfo structure_Mi = t.GetMethod("Class1", structure_Type);  
  144.             //structure_Mi.Invoke(theObj, structure_Obj);  
  145.             MethodInfo mi = t.GetMethod("a");  
  146.             //t.GetField("a").SetValue(theObj, "a");  
  147.             this.textBox1.Text = t.GetField("a").GetValue(theObj).ToString();  
  148.         }  
  149.         //调用事件  
  150.         private void delegate_()  
  151.         {  
  152.               
  153.             a = Assembly.LoadFrom("Class1.dll");  
  154.             Type t = a.GetType("Class1.Class1");  
  155.             Object theObj = Activator.CreateInstance(t);  
  156.             //MethodInfo mi = t.GetMethod("event_Test");  
  157.             //mi.Invoke(theObj, null);  
  158.             //System.Reflection.Emit命名空间的类提供了一种特殊形式的反射,使您能够在运行时构造类型。反射也可用于创建称作类型浏览器的应用程序,它使用户能够选择类型,然后查看有关选定类型的信息。  
  159.               
  160.             //使用 EventInfo 来了解如下的类似信息:事件的名称、事件处理程序数据类型、自定义属性、声明类型和反射类型等;并添加或移除事件处理程序。  
  161.             EventInfo ei = t.GetEvent("delet_Event",BindingFlags.CreateInstance|BindingFlags.Instance|BindingFlags.Public);  
  162.             Type t1 = a.GetType("Class1.bb");  
  163.             Delegate d = Delegate.CreateDelegate(t1, this"TextShow");  
  164.             ei.AddEventHandler(theObj, d);  
  165.             Type[] typ=new Type[1];  
  166.             typ[0]=Type.GetType("System.String");  
  167.             Object[] obj = new Object[1];  
  168.             obj[0] = "aaaa";  
  169.             //使用MethodInfo了解以下信息:方法的名称、返回类型、参数、访问修饰符(如 public 或 private)和实现详细信息(如 abstract 或 virtual)等。使用 Type 的 GetMethods 或 GetMethod 方法来调用特定的方法。  
  170.             MethodInfo mi = t.GetMethod("event_Test",typ);  
  171.             mi.Invoke(theObj, obj);  
  172.         }  
  173.         private void TextShow(string str)  
  174.         {  
  175.             this.textBox1.Text = str;  
  176.         }  
  177.     }  

  1. }  


Assembly asm = Assembly.LoadFrom("类库DLL路径地址");
                    Type typBean = asm.GetType(bean.ToString());
                    objBean = System.Activator.CreateInstance(typBean);
                }
                catch (Exception e)
                {
                    throw new ivpcore.ivpcoreException("debug:" + e.Message);
                }
                foreach (DataRow dr in dt.Rows)
                {
                    PropertyInfo[] aryInfo = objBean.GetType().GetProperties();
                    foreach (DataColumn dc in dt.Columns)
                    {
                        foreach (PropertyInfo pf in aryInfo)
                        {
                            if (pf.Name == dc.ColumnName.ToString())
                            {
                                // Db Null Value
                                if (dr[dc.ColumnName] == System.DBNull.Value)
                                {
                                    if (pf.PropertyType.ToString() == "System.String")
                                    {
                                        pf.SetValue(objBean, string.Empty, null);
                                    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值