2

这是一个示例代码,当使用虚拟方法和覆盖时,它不会像我预期的那样工作。为什么?

main()
{
    Child c = new Child();
    c.Trigger = new Trigger();
}

public class Parent
{
    public Trigger _trigger;

    public Trigger Trigger
    {
        set 
        {
            _trigger = value;
            _trigger.TriggerEvent += Trigger.TriggerHandler(OnTrigger);
        }
    }

    internal virtual void OnTrigger(int type)
    {
        Write("I don't want to write this!");
    }
}

public class Child : Parent
{
    internal override void OnTrigger(int type)
    {
        Write("I want this to be written, but it's not.");
    }
}

订阅父事件的方法“OnTrigger”不会被覆盖。如何使父级中订阅的事件执行子级的方法?

4

2 回答 2

0

下面的代码是你想要的吗?

    public class Trigger
    {
        public event Action TriggerEvent;

        public void NotifyTrigger()
        {
            this.TriggerEvent();
        }
    }

    public class Parent
    {
        public Trigger _trigger;

        public Trigger Trigger
        {
            get
            {
                return _trigger;
            }

            set
            {
                _trigger = value;
                _trigger.TriggerEvent += this.OnTrigger;
            }
        }

        internal virtual void OnTrigger()
        {
            Debug.WriteLine("I don't want to write this!");
        }
    }

    public class Child : Parent
    {
        internal override void OnTrigger()
        {
            Debug.WriteLine("I want this to be written, but it's not.");
        }
    }

    [Test]
    public void testetst() // Or Main
    {
        Child c = new Child();
        c.Trigger = new Trigger();
        c.Trigger.NotifyTrigger();
    }

它对我有用。输出是:“我想写这个,但不是。”

于 2013-11-12T14:34:06.060 回答
0

我在其他地方发现了问题。在这种情况下 Child1.Trigger 应该影响 Child 子实例,但不是调用 child.Trigger.NotifyTrigger()(使用 Yohanes 的示例),而是调用它自己的 (this.Trigger.NotifyTrigger) Child1 没有覆盖 OnTrigger!

于 2013-11-12T15:17:50.650 回答