这是一个示例代码,在使用虚拟方法和重写时无法正常工作。为什么?
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();
}
它为我工作。输出为:“我希望这样写,但不是。”