Событие, вызванное событием в базовом классе, а не в производном классе - PullRequest
0 голосов
/ 03 декабря 2010

У меня есть следующая структура:

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 ();он вызовет функцию Even для класса "Item", а затем выполнит handleStuff () для класса childItem1.

Так что вот моя проблема: когда я подписываюсь на событие childItem1.Boom, он также будет запускаться при вызовеchildITem2.Dostuff ();поскольку он также запускает событие boom в классе «item»

Итак, вот вопрос, как я могу определить обработчики событий для базового класса, на который я могу подписаться в производных классах, но без вышеуказанной проблемы?

1 Ответ

1 голос
/ 03 декабря 2010

Это должно быть потому, что ваше событие объявлено как Static.

Если в базовом классе объявлено нестатическое событие, то событие будет вызываться правильно, как вы ожидаете.

Следующая программа напечатает Derived соответственно -

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
    {
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...