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 >= 2)
            {
                string filename = s[1];
                if (filename.IndexOf(‘:‘) < 0)   //不包括路径
                {
                    if (AppDomain.CurrentDomain.SetupInformation.ApplicationBase.EndsWith(@"\"))
                        filename = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + s[1];
                    else
                        filename = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + @"\" + s[1];
                }
                if (File.Exists(filename))
                {
                    Assembly asm = Assembly.LoadFrom(filename);
                    instance = asm.CreateInstance(s[0]);

                }
                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;
        }
时间: 2024-11-18 07:20:42

c# 反射事件的相关文章

C# 关于反射事件

在frmMain类中的代码 private void StartRun(string tag, string date, bool tipType)        {            var dllPath = string.Format("{0}.{1}", GetType().Namespace, tag);            var assembly = Assembly.Load(dllPath);            var classFullPath = str

班主任来啦之观察者模式,事件委托等Java实现---如果你还不懂,看完此文,就一定会懂

班主任来啦! 小A对小B说:"今天真是笑死人了,我们班一位同学在仔细的时候看NBA球赛,被班主任抓了个正着.班主任脸都绿了,哈哈,真是笑死我了. 小B说:"啊,你们怎么同学怎么敢在课上看电视啊?" 小A说:"没有的,他们那帮子男生经常自习的时候看球赛的.我们班有个女生坐在前排,那些男生就给她送写小礼物啊什么的.班主任来了,那个女生就去通知敲一下桌子." 小B说:"好吧.这也行.那今天怎么会有人被抓?" 小A说:"这是因为刚好班

光纤故障诊断和故障排除之福禄克CFP2-100-Q

您已经完成了光纤安装,现在正在使用光纤损耗测试仪(OLTS)对电缆设备进行认证--这是进行1级认证并准确测量损耗以确保应用支持的理想工具. 遗憾的是,您发现一些关键光纤链路的损耗远超该应用的损失预算.现在您需要对这些链路进行故障诊断和排除,以便解决问题,找到问题的速度越快,解决问题的速度就越快. OLTS无法准确确定链路每个连接点的损耗情况,您根本没有时间检查每条故障链路的连接器是否被污染,或利用可视化故障定位仪(VFL)尝试找到可能在任何地方的中断.但是,如果您拥有光时域反射仪(OFP2-10

光纤故障诊断和故障排查

您已经完成了光纤安装,现在正在使用光纤损耗测试仪(OLTS)对电缆设备进行认证--这是进行1级认证并准确测量损耗以确保应用支持的理想工具. 遗憾的是,您发现一些关键光纤链路的损耗远超该应用的损失预算.现在您需要对这些链路进行故障诊断和排除,以便解决问题,找到问题的速度越快,解决问题的速度就越快. OLTS无法准确确定链路每个连接点的损耗情况,您根本没有时间检查每条故障链路的连接器是否被污染,或利用可视化故障定位仪(VFL)尝试找到可能在任何地方的中断.但是,如果您拥有光时域反射仪(OFP2-10

QObject提供了QMetaObject元类信息(相当于RTTI和反射),信号与连接,父子关系,调试信息,属性,事件,继承关系,窗口类型,线程属性,时间器,对象名称,国际化

元类信息(相当于RTTI和反射),信号与连接,父子关系,调试信息,属性,事件,继承关系,窗口类型,线程属性,时间器,对象名称,国际化其中元类又提供了:classInfo,className,构造函数,多重祖先元类,method, property, Enumerator, Signal, Slot等等 http://doc.qt.io/qt-5/qobject.html http://doc.qt.io/qt-5/qmetaobject.html 我感觉Qt的出现,除了提供GUI以外,主要就是提

.NET基础拾遗(4)委托、事件、反射与特性

Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 一.委托基础 1.1 简述委托的基本原理 委托这个概念对C++程序员来说并不陌生,因为它和C++中的函数指针非常类似,很多码农也喜欢称委托为安全的函数指针.无论这一说法是否正确,委托的的确确实现了和函数指针类似的功能,那就是提供了程序回调指定方法的机制. 在委托内部,包含了一个指向某个方法的指针(这一点上委托实现机制和C++的函数指针一致),为何称其

Android自定义工具类获取按钮并绑定事件(利用暴力反射和注解)

Android中为按钮绑定事件的有几种常见方式,你可以在布局文件中为按钮设置id,然后在MainActivity中通过findViewById方法获取按钮对象实例,再通过setOnClickListener为按钮绑定事件,如下所示: //1.获取控件 btn = (Button)findViewById(R.id.button1); //2.绑定事件 btn.setOnClickListener(new OnClickListener() { @Override public void onCl

C#反射调用其它DLL的委托事件 传值

C#反射调用其它DLL的委托事件 传值在插件式开发.我们要调用其它插件或模块的委托事件时.那么我们需要通过反射. 复制代码namespace Module2{ /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> [Plugin("MainWindow", "测试反射")] public partial class MainWindow { public delegate void Te

java事件响应方法汇总(容器类监听、监听器类、AbstractAction、反射)

Java图形用户界面中,处理事件时所必须的步骤是: 1.创建接受响应的组件(控件)2.实现相关事件监听接口3.注册事件源的动作监听器4.事件触发时的事件处理 相应的可以通过以下的集中方式来作出事件响应. [java] view plaincopyprint? <span style="font-size: 18px;">一.容器类监听 效果:单击窗体中的三个按钮,实现相应的相应时间. </span><pre class="java" n