首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

怎么触发一个未知类型但知道事件名的事件

2012-03-02 
如何触发一个未知类型但知道事件名的事件我需要在一个未知类型的object对象中出发已知事件名的事件怎么做

如何触发一个未知类型但知道事件名的事件
我需要在一个未知类型的object对象中出发已知事件名的事件怎么做呀?    
 
 
public     delegate     void     TestHandler();    
              class     Program    
              {    
                              static     void     Main(string[]     args)    
                              {    
                                              Program     pr     =     new     Program();    
                                              DataTest.eventTest     +=     new     TestHandler(pr.DataTest_eventTest);    
                                              DataTest     dt=new     DataTest();    
                                              DataPackage     dp     =     new     DataPackage();    
                                              dp.TriggeTest((object)dt,dt.GetType());    
                                              Console.ReadKey();    
                              }    
                              public     void     DataTest_eventTest()    
                              {    
                                              Console.WriteLine( "test     succeed ");    
                              }    
              }    
public     class     DataTest    
{    
                              public     static     event     TestHandler     eventTest;    
}    
              public     class     DataPackage    
              {    
                              private     DataTest     dt;    


                              public     object     m_obj     =     null;    
                              public     DataPackage()    
                              {    
 
                                              dt     =     new     DataTest();    
                              }    
                              public     void     TriggeTest(object     obj,Type     type)    
                              {    
                                                  m_obj=obj;    
                                                  //现在需要触发m_obj里的eventTest事件    
                              }    
              }

[解决办法]
未知道类型?m_obj无法转换啊,你应该把这个事件抽象出来放到一接口或抽象类,再转换成该接口再触发.
[解决办法]
不解 楼主用意
[解决办法]
传进来的type不就是类型吗,但是事件应该在自己的类里被一个函数触发,外部只要调用这个函数就可以了。当然也可以像jjyjjyjjy 说的将这个触发函数抽象到接口里,然后将m_obj转换为该接口调用。如果规定死了函数名,也可以用反射。
public class DataTest
{
public static event TestHandler eventTest;

public void fire()
{
eventTest();
}
}
public class DataPackage
{
private DataTest dt;
public object m_obj = null;
public DataPackage()
{

dt = new DataTest();
}
public void TriggeTest(object obj, Type type)
{
type.InvokeMember( "fire ", BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Instance, null, obj, new object[] { });
}
}
[解决办法]
事件是通知机制,只能由所属类型自己触发,而不能让别人来触发。

热点排行