这是一个示例代码,在使用虚拟方法和重写时无法正常工作。为什么?

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”不会被覆盖。如何使在父级中订阅的事件执行子级的方法?

最佳答案

以下是您想要的代码吗?

    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();
    }


它为我工作。输出为:“我希望这样写,但不是。”

09-10 04:24
查看更多