如何触发一个未知类型但知道事件名的事件
我需要在一个未知类型的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[] { });
}
}
[解决办法]
事件是通知机制,只能由所属类型自己触发,而不能让别人来触发。