我有一个C#类来检测和处理某些事件。我想从这个类中派生出以不同方式对事件作出反应的子类,如下所示:
public class Detector
{
void EventXHasHappened()
{
React();
}
protected virtual void React()
{
}
}
public class Derived : Detector
{
protected override void React()
{
// Never gets called
}
}
如果我理解正确,这不起作用,因为无法从基类调用派生类中的函数。有没有一种巧妙的方法可以做到这一点,还是整个方法都错了? (那么什么是好的设计?)
答案 0 :(得分:0)
可以从派生类中调用方法;您将继承EventXHasHappened方法,因此,对于所有意图和目的,您的代码将起作用。
var d = new Derived();
d.EventXHadHappened(); // This will call d.React();
答案 1 :(得分:0)
var derived = new Derived();
derived.EventXHasHappened();
这是有效的代码。将调用React(),您可以在任何派生类中重写React()并更改行为。
作为' React'是一个受保护的方法,它可以被任何子类调用。此外,虚拟关键字意味着它被设计为被覆盖并在基类中使用!
答案 2 :(得分:0)
如果我理解你的问题,可能是你试图用反应方法实现多态行为:如果是,那么请按照下面的文章: https://www.infoworld.com/article/3024718/application-development/how-to-implement-polymorphism-in-c.html
答案 3 :(得分:0)
上面的代码有效,并且会调用派生的覆盖。但是,如果基础中没有React
的实现,并且可能没有实例化其中一个的逻辑,那么我将使用抽象类,React
作为抽象方法:< / p>
public abstract class Detector
{
public void EventXHasHappened()
{
React();
}
protected abstract void React();
}
public class Derived : Detector
{
protected override void React()
{
//TODO - your code
}
}
然后:
Detector d = new Derived();
d.EventXHasHappened();