事件按事件的基类引发的,而不是派生类

我有以下结构:

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

所以,当我打电话basicly childItem1.DoStuff(); 它会触发即使在“项目”类,然后在childItem1类​​执行handleStuff()。

因此,这里是我的问题,当我订阅事件childItem1.Boom它也会触发如果我叫childITem2.Dostuff(); 因为它也引发了热潮事件上的“项”级

因此,这里的问题,我该怎么定义事件处理的一个基类,我可以订阅的派生类,但没有上面的问题?

--------------解决方案-------------

这一定是因为你有你的事件声明为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
{
}

分类:C# 时间:2015-03-15 人气:0
本文关键词: C#中,事件
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.064 (s). 10 q(s)