c# 反射事件
被反射类中:
public delegate void CompeletedHandler(); public static event CompeletedHandler AnalysisCompeleted; static void BasePath_AnalysisCompeleted()
{
if (AnalysisCompeleted != null)
AnalysisCompeleted();
}
反射时用的类中:
namespace notam { public partial class Form1 : Form { public Form1() { InitializeComponent(); } public static void SS() { //return null; } } }
public static object InvokeClassMethod(string className,string methodName,object[] parameters,Type type)
{
object objClass =Cores.ClassBuilder.CreateObject(className);
Type tt = objClass.GetType();
System.Reflection.MethodInfo mi = tt.GetMethod(methodName);
System.Reflection.EventInfo ee = tt.GetEvent("AnalysisCompeleted");
ee.AddEventHandler(objClass, Delegate.CreateDelegate(ee.EventHandlerType,type, "SS"));
parameters = new object[] { parameters };
return mi.Invoke(objClass, parameters);
}
/// <summary>
/// 根据类名创建对象。
/// </summary>
/// <param name="className"></param>
/// <returns></returns>
public static object CreateObject(string className)
{
object instance = null; string[] s = className.Split(',');
if (s.Length >= )
{
string filename = s[];
if (filename.IndexOf(':') < ) //不包括路径
{
if (AppDomain.CurrentDomain.SetupInformation.ApplicationBase.EndsWith(@"\"))
filename = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + s[];
else
filename = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + @"\" + s[];
}
if (File.Exists(filename))
{
Assembly asm = Assembly.LoadFrom(filename);
instance = asm.CreateInstance(s[]); }
else
{
throw new InvalidDataException("配置文件中,FBFactory配置不正确,找不到动态库文件:" + filename + " !");
}
}
else
{
//instance = Assembly.GetExecutingAssembly().CreateInstance(className);
instance = Assembly.LoadFrom(className).CreateInstance("FineMap.FinemapMain");
if (instance == null)
{
instance = Assembly.GetCallingAssembly().CreateInstance(className);
}
if (instance == null)
{
IEnumerator ie = AppDomain.CurrentDomain.GetAssemblies().GetEnumerator();
while (ie.MoveNext())
{
Assembly ab = ie.Current as Assembly;
if (ab != null)
{
instance = ab.CreateInstance(className);
if (instance != null)
break;
}
}
}
} return instance;
}
c# 反射事件的更多相关文章
- C# 关于反射事件
在frmMain类中的代码 private void StartRun(string tag, string date, bool tipType) { var d ...
- JNI详解---从不懂到理解
转载:https://blog.csdn.net/hui12581/article/details/44832651 Chap1:JNI完全手册... 3 Chap2:JNI-百度百科... 11 C ...
- Android 框架学习1:EventBus 3.0 的特点与如何使用
前面总结了几篇基础,在这过程中看着别人分享自定义 View.架构或者源码分析,看起来比我写的"高大上"多了,内心也有点小波动. 但是自己的水平自己清楚,基础不扎实画再多源码流程图也 ...
- .NET基础拾遗(4)委托、事件、反射与特性
Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...
- 通过反射绑定事件_Office Visio
花了好几个小时才Try出来,记录一下: //反射获取Visio.Application,此处没有判断是否有安装Visio mVisioType = System.Type.Get ...
- C# 调用一个按钮的Click事件(利用反射)
最基本的调用方法 (1)button1.PerformClick();(2)button1_Click(null,null);(3)button_Click(null,new EventArgs()) ...
- 使用反射让Spinner选择同一选项时触发onItemSelected事件
翻看源码,Spinner判断是否触发onItemSelected,是在它的基类AdapterView里面做的: void checkSelectionChanged() { if ((mSelecte ...
- java事件响应方法汇总(容器类监听、监听器类、AbstractAction、反射)
Java图形用户界面中,处理事件时所必须的步骤是: 1.创建接受响应的组件(控件)2.实现相关事件监听接口3.注册事件源的动作监听器4.事件触发时的事件处理 相应的可以通过以下的集中方式来作出事件响应 ...
- Android自定义工具类获取按钮并绑定事件(利用暴力反射和注解)
Android中为按钮绑定事件的有几种常见方式,你可以在布局文件中为按钮设置id,然后在MainActivity中通过findViewById方法获取按钮对象实例,再通过setOnClickListe ...
随机推荐
- ActiveMQ 即时通讯服务 浅析
一. 概述与介绍 ActiveMQ 是Apache出品,最流行的.功能强大的即时通讯和集成模式的开源服务器.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provi ...
- 大熊君JavaScript插件化开发------(实战篇之DXJ UI ------ ItemSelector重构完结版)
一,开篇分析 Hi,大家好!大熊君又和大家见面了,还记得上一篇文章吗.主要讲述了以“jQuery的方式如何开发插件”,以及过程化设计与面向对象思想设计相结合的方式是 如何设计一个插件的,两种方式各有利 ...
- [Python] 机器学习库资料汇总
声明:以下内容转载自平行宇宙. Python在科学计算领域,有两个重要的扩展模块:Numpy和Scipy.其中Numpy是一个用python实现的科学计算包.包括: 一个强大的N维数组对象Array: ...
- HQL常用的查询语句
摘录自某人,比较有用,比较全. // HQL: Hibernate Query Language. // 特点: // >> 1,与SQL相似,SQL中的语法基本上都可以直接使用. // ...
- Go - 数组 和 切片(array、slice)
一.数组 与其他大多数语言类似,Go语言的数组也是一个元素类型相同的定长的序列. (1)数组的创建 数组有 3 种创建方式: 1) [length]Type 2) [length]Type{value ...
- PHP mysql与mysqli事务详解
官方对PHP连接到MySQL数据库服务器的三种主要的API简介如下: http://php.net/manual/zh/mysqli.overview.php PHP mysql与mysqli事务详解 ...
- PHP HTML代码反转义
后端为了防止xss的攻击,会过滤前端用户的输入的数据,这样虽然有效的避免xss攻击,但是会带来一个问题,要么全部过滤html留下不非法的数据,要么把HTML代码转义,但是转义之后又会直接在浏览器内显示 ...
- AC自动机
AC自动机,全称Aho-Corasick自动机.如果没记错的话好像就是前缀自动机. 其实AC自动机就是KMP上树的产物.理解了KMP,那AC自动机应该也是很好理解的. 与KMP类似,AC自动机也是扔一 ...
- Eclipse 设置SVN忽略文件
1.在 Eclipse 中点击菜单 window --> Preferences --> Team --> Ignored Resources 2.在Eclipse的导航视图中,选中 ...
- WebStrom快捷键
WebStorm 是 JetBrains 推出的一款商业的 JavaScript 开发工具 任何一个编辑器都需要保存(ctrl + s),这是所有win平台上编辑类软件的特点,但是webstorm编辑 ...