CSharp - 在构造函数中将继承的方法订阅事件,然后在继承的类中调用该构造函数

  显示原文与译文双语对照的内容
135 5

我似乎在 C# 中有一个问题,构造函数。继承和事件订阅。

考虑以下 C# 程序:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace EventTest
{
 public class Widget
 {
 public delegate void MyEvent();
 public event MyEvent myEvent;
 public void SetEvent()
 {
 myEvent();
 }
 }
 public class Base
 {
 Widget myWidget;
 protected Base() { }
 protected Base(Widget awidget)
 {
 myWidget = awidget;
 myWidget.myEvent += myEvent;
 }
 public void myEvent() { }
 }
 public class Derived : Base
 {
 public Derived(Widget awidget) : base(awidget) { }
 new public void myEvent()
 {
 System.Console.WriteLine("The event was fired, and this text is the response!");
 }
 }
 class Program
 {
 static void Main(string[] args)
 {
 Widget myWidget = new Widget();
 Derived myDerived = new Derived(myWidget);
 myWidget.SetEvent();
 }
 }
}

我想要的是显示的文本。换句话说,我想要将一个继承的基方法订阅到基类中的某个事件,然后在一个子类中调用构造函数。

有没有什么办法可以做到?

时间:原作者:3个回答

123 4

你需要设置方法虚拟:

public class Base
{... 
 public virtual void myEvent() { }

并覆盖它

 public class Derived : Base
{
. . .
 public override void myEvent()
 {
 System.Console.WriteLine("The event was fired, and this text is the response!");
 }
}
原作者:
116 4
new public void myEvent()

这将创建一个新的事件。你不希望这样在基类中创建事件 virtual,并使用 override 代替 new

原作者:
...