我有以下结构:
class item
Static EventHandler Boom
public virtual void handleStuff();
public void DoStuff()
trigger Boom EventHandler
handleStuff();
class childItem1 : item
override handleStuff() etc
class childItem2 : item
override handleStuff() etc
基本上当我调用childItem1.DoStuff()时;它将在“Item”类上触发even,然后在childItem1类上执行handleStuff()。
所以这是我的问题,当我订阅事件childItem1.Boom时,如果我调用childITem2.Dostuff(),它也会触发;因为它也会触发“项目”类的繁荣事件
所以这就是问题,如何在基类上定义eventhandler,我可以在派生类上订阅,但没有上述问题?
答案 0 :(得分:1)
这必须是因为您将事件声明为Static
。
如果您在基类上声明了非静态事件,那么将按预期正确调用该事件。
以下程序将打印Derived
apprpriately -
class Program
{
static void Main(string[] args)
{
var d = new Derived();
d.Boom += new EventHandler(HandleBoom);
d.TriggerBoom();
Console.ReadLine();
}
static void HandleBoom(object sender, EventArgs e)
{
Console.WriteLine(sender.GetType());
}
}
class Base
{
public event EventHandler Boom = null;
public void TriggerBoom()
{
if(Boom != null)
Boom(this, EventArgs.Empty);
}
}
class Derived : Base
{
}