反射的常用用法

原创 2004年09月21日 12:57:00

1.反射调用窗体
private void button1_Click(object sender, System.EventArgs e)
  {
   Assembly assm = Assembly.LoadFrom("e://WindowsApplication5.dll");
   Type TypeToLoad= assm.GetType("WindowsApplication5.Form1");
   
   object obj;
   obj = Activator.CreateInstance(TypeToLoad);
   Form formToShow = null;
   formToShow = (Form)obj;
   formToShow.Show();
  
  }
2
private void button1_Click(object sender, System.EventArgs e)
  {
   try
   {
    Type t = Type.GetType("WindowsTest.Form2");
    object obj = System.Activator.CreateInstance(t);
    MethodInfo mif = t.GetMethod("Show");
    mif.Invoke(obj,null);//or ((Form)obj).Show();
   }
   catch(Exception ex)
   {
    MessageBox.Show(ex.Message);
   }
  }
3
private void btnReflection_Click(object sender, System.EventArgs e)
  {
   try
   {
    Assembly assembly = Assembly.LoadFrom(@"D:/WindowsTest/WindowsTest/bin/Debug/MyClassLib.dll");
    Type typeload = assembly.GetType("MyClassLib.Class1");
    object obj = Activator.CreateInstance(typeload);
    //MethodInfo method = typeload.GetMethod("ShowMessage",new Type[]{typeof(string),typeof(int)});
    //method.Invoke(obj,new object[]{"2342",213});
    MethodInfo []methods = typeload.GetMethods();
    MethodInfo method = typeload.GetMethod("ShowMessage",Type.EmptyTypes);
    method.Invoke(obj,null);
    
    MessageBox.Show("Success!");
   }
   catch( Exception ex)
   {
    MessageBox.Show(ex.Message);
   }
  }

7.
例DLL 文件内容如下:

using System;
using System.Windows.Forms;

namespace ArLi.CommonPrj {
 public class ShowAboutBox {
  public static void ShowOn(Form fm) {
   MessageBox.Show("OK");
  }
 }
}

编译后文件名叫 AboutBox.dll

主程序里调用方法如下:

//定义文件名
FileInfo aBoxFile = new FileInfo(Path.Combine(Application.StartupPath,"AboutBox.dll"));

if (aBoxFile.Exists) { //如果存在
 try { //预防意外,比如不载不完整,非法DLL
  // 开始载入
  Assembly aBox = Assembly.LoadFrom(aBoxFile.FullName);
  Type[] _t = aBox.GetTypes(); //获得全部Type
  foreach (Type t in _t) { //遍历
   //如果发现名称空间和类名有相符的
   if (t.Namespace == "ArLi.CommonPrj" && t.Name == "ShowAboutBox") {
    //载入方法
    MethodInfo m = t.GetMethod("ShowOn");
    if (m != null) { //如果要载入的方法存在
     //创建实例
     object o = Activator.CreateInstance(t);
     //执行该方法,后面的this 是参数
     m.Invoke(o,new object[]{this});
    }
    else { //载入的方法不存在
     MessageBox.Show("File /"AboutBox.dll/" Invalid!/n/nMethod Error.");
    }
    return;
   }
  }
  MessageBox.Show("File /"AboutBox.dll/" Invalid!/n/nAssembly Name Error.");
 } //文件、命名空间、方法都相符,但执行该DLL 内容出错
 catch (System.NullReferenceException ex) {
  MessageBox.Show("File /"AboutBox.dll/" Invalid!");
 } //文件非正常DLL
 catch (Exception ex) {
  MessageBox.Show("File /"AboutBox.dll/" Error: /n/n" + ex.Message);
 }
}
else { //文件没找到
 MessageBox.Show("File /"AboutBox.dll/" Missing!");
}

[JAVA]运用反射机制,抛出的异常的捕获方法

背景介绍笔者前些日子做过一个这样的事情,利用反射机制调用一个会报Checked的异常的方法,在调用后没法抛出异常(原因是反射机制调用是没法catch到Checked异常的)。举个简单的例子如下。 1...
  • u010536377
  • u010536377
  • 2016年07月04日 21:59
  • 3605

利用反射调用方法抛出的异常如何被捕获?

我们通常在java开发中采用自定义异常,在业务中遇到非系统错误时抛出自定义异常,并在上层进行捕获,就能知道业务的具体出错信息。这种方法很常用,但是如果采用反射去自动调用某个方法时,却不能捕获到用户自定...
  • tangkechu
  • tangkechu
  • 2013年09月09日 15:03
  • 4542

java 反射api的功能详解

前言     本文是我整理的Java反射的一些知识,其中大部分内容是翻译http://tutorials.jenkov.com/java-reflection/index.html的。 1. ...
  • qilixiang012
  • qilixiang012
  • 2014年07月24日 14:41
  • 3254

java反射的基本用法介绍

  • 2011年08月16日 15:02
  • 36KB
  • 下载

Java 反射的入门用法示例

前言:反射:动态获取类 (字节码文件 如本篇中的Person.class),并对其成员进行运行。反射在Android应用层的开发中可能遇到会稍微少一点,但对于想打通底层的小伙伴来说,必须要熟练掌握运用...
  • u014158743
  • u014158743
  • 2016年10月26日 22:41
  • 427

反射的基本用法大全

类结构简要说明 自己做个记录,个人总结的反射用法,基本按照下面的代码code一遍就理解了。 包路径:relection Person类为具体的类,继承Animal抽象类,实现Eat接口...
  • KingBoyWorld
  • KingBoyWorld
  • 2017年05月25日 18:38
  • 336

c# 反射的用法

c# 反射的用法
  • dingxy
  • dingxy
  • 2011年05月23日 12:02
  • 322

Java-->反射的用法(新手都能入门)

简单介绍 Java反射的用法:本文内容包含在:http://blog.csdn.net/angcyo/article/details/46228465并且提供了Demo用例;1:获取需要反射的对象(需...
  • angcyo
  • angcyo
  • 2015年05月29日 12:13
  • 986

c# 反射的用法(转)

在网上查找了不少的资料,可以说大同小异,概念性的东西网上一搜一堆,今天把反射的东西整理了一下,供大家使用,我保证我这里是最全面的东西,当然也是基础的东西,在学好了这一切的基础上,大家可以学习反射的具体...
  • mao_kun
  • mao_kun
  • 2011年05月23日 18:52
  • 403

Java中反射的常用方法及总结

反射,是在java中非常有用,在框架中也经常接触的一种方法,所以反射是在开发中必须会的东西 所谓反射,就是给你一个XX.class文件,你通过反射方法,能够拿到该XX类相关的所有资源,比如该类所在位...
  • IT666DHW
  • IT666DHW
  • 2017年11月28日 14:19
  • 183
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:反射的常用用法
举报原因:
原因补充:

(最多只允许输入30个字)