由基类上的事件触发的事件,而不是派生类

时间:2010-12-03 09:35:44

标签: c# events

我有以下结构:

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,我可以在派生类上订阅,但没有上述问题?

1 个答案:

答案 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
    {
    }