请教:如果判断子类是否处理了继承自父类的某个事件?测试代码如下:
/// <summary>
/// class1是class2的父类
/// </summary>
public class class1
{
public delegate void TestEventHandler(string Message);
public event TestEventHandler Testdelegate;
virtual public void OnTest(string Message)
{
Testdelegate(Message);
}
}/// <summary>
/// class2是class1的子类
/// </summary>
public class class2:class1
{
}/// <summary>
/// 测试类
/// </summary>
public class TestClass
{
private class2 oClass2 =new class2();
public TestClass()
{
oClass2.Testdelegate+=new SBOTest.class1.TestEventHandler(oClass2_Testdelegate);
} private void oClass2_Testdelegate(string Message)
{
}
/// <summary>
/// 问题:
/// 如果判断子类class2是否处理了Testdelegate事件?
/// </summary>
/// <returns></returns>
public bool hasEvent()
{
FieldInfo oInfo = oClass2.GetType().GetField("Testdelegate", BindingFlags.NonPublic | BindingFlags.Instance);
Delegate oDelegate = ( Delegate ) oInfo.GetValue(oClass2);
return (oDelegate != null);
}
}
/// <summary>
/// class1是class2的父类
/// </summary>
public class class1
{
public delegate void TestEventHandler(string Message);
public event TestEventHandler Testdelegate;
virtual public void OnTest(string Message)
{
Testdelegate(Message);
}
}/// <summary>
/// class2是class1的子类
/// </summary>
public class class2:class1
{
}/// <summary>
/// 测试类
/// </summary>
public class TestClass
{
private class2 oClass2 =new class2();
public TestClass()
{
oClass2.Testdelegate+=new SBOTest.class1.TestEventHandler(oClass2_Testdelegate);
} private void oClass2_Testdelegate(string Message)
{
}
/// <summary>
/// 问题:
/// 如果判断子类class2是否处理了Testdelegate事件?
/// </summary>
/// <returns></returns>
public bool hasEvent()
{
FieldInfo oInfo = oClass2.GetType().GetField("Testdelegate", BindingFlags.NonPublic | BindingFlags.Instance);
Delegate oDelegate = ( Delegate ) oInfo.GetValue(oClass2);
return (oDelegate != null);
}
}
TestClass是我的测试类,我是想晓得如果在代码中使用了class2 ,
我需要判断,这个class2 的Testdelegate事件,是否有事件处理函数。
测试类TestClass中的hasEvent()是我要写的判断函数,这个函数在使用时报错。
我不知道正确的应该怎么写?
class1 , class2 只是触发事件,真正处理是在引用类里,class1 ,class2 只是相当于包含一个函数指针
这么问也许清楚些:
引用类如何判断oClass2(oClass2是class2类的实例)处理了Testdelegate事件?
{
return this.Testdelegate != null
}
事件(event)是委托(delegate)的一种特殊形式吧。我是不是没有说明白我的需求?有2个类如下:
/// <summary>
/// class1是class2的父类
/// </summary>
public class class1
{
public delegate void TestEventHandler(string Message);
public event TestEventHandler Testdelegate;
virtual public void OnTest(string Message)
{
Testdelegate(Message);
}
}/// <summary>
/// class2是class1的子类
/// </summary>
public class class2:class1
{
}在使用class2时,如果判断class2的实例,处理了Testdelegate事件?
{
Testdelegate();
}//你把空方法写成这样
private void oClass2_Testdelegate(string Message)
{
Console.WrtieLine("abc");
}
第三方使用class2的类,比如说是TestClass。
TestClass如何判断class2的实例,处理了Testdelegate事件?也就是,TestClass得到一个object对象,已知这个对象有一个“Testdelegate”事件(这个对象也许是class2)。如何判断这个已经对象处理了Testdelegate事件?
处理了事件到底是什么意思?
就是事件是否有和他关联的事件处理函数。
类似这种:oClass2.Testdelegate+=new SBOTest.class1.TestEventHandler(oClass2_Testdelegate);
当事件定义在一个直接使用的类里面,我使用
public bool hasEvent()
{
FieldInfo oInfo = oClass2.GetType().GetField("Testdelegate", BindingFlags.NonPublic | BindingFlags.Instance);
Delegate oDelegate = ( Delegate ) oInfo.GetValue(oClass2);
return (oDelegate != null);
}
是可以检测到的。
但如果是继承父类的Event,那么,这个函数就处理不了了。
处理了事件到底是什么意思?
就是事件是否有和他关联的事件处理函数。
类似这种:oClass2.Testdelegate+=new SBOTest.class1.TestEventHandler(oClass2_Testdelegate);你自己都知道已经关联了还问?
我昏,我给的是测试代码呀。
要是已知必然关联了,我就不用这么费劲了呀。
{
public delegate void TestEventHandler(string Message);
public event TestEventHandler Testdelegate;
public bool IsExecute = false;
virtual protected void OnTest(string Message)
{
if(Testdelegate!=null)
{
Testdelegate(Message);
IsExecute = true;
}
}
}
2。【类1】有一个【事件1】( public event 事件1;)
3。【类1】是【类2】的父类。
4。【类2】是交给程序员使用的类。
5。【类3】在操作【类2】的时候,需要判断,程序员是否给【类2】赋予了【事件1】的
事件处理函数。我这么说,各位热心的大侠,能看明白吗?
using System;namespace ConsoleApplication1
{
public class class1
{
public delegate void TestEventHandler(string Message);
public event TestEventHandler Testdelegate; virtual public void OnTest(string Message)
{
Testdelegate(Message);
} public class1()
{ } public bool hasEvent()
{
return (Testdelegate != null);
}
} /// <summary>
/// class2是class1的子类
/// </summary>
public class class2:class1
{
public class2()
{
}
} public class TestClass2
{
private static class2 c2;
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
c2=new class2();
c2.Testdelegate+=new ConsoleApplication1.class1.TestEventHandler(c2_Testdelegate);
c2.OnTest("123123");
} private static void c2_Testdelegate(string Message)
{
Console.Write( Message );
Console.Write(c2.hasEvent().ToString()); //结果为 123123True
}
}
}