如果我使用"override"属性创建方法,派生方法将不会自动调用基本方法实现,我将需要使用"base"关键字手动调用它,如下所示:
public class A
{
public virtual void Say()
{
Console.Write("A");
}
}
public class B : A
{
public override void Say()
{
base.Say();
Console.Write("B");
}
}
Run Code Online (Sandbox Code Playgroud)
因此,只有在这种情况下,字符串"A"和"B"才会写入控制台.所以问题是如何摆脱"base.Say();" 线?所以我想强制每个派生方法"Say"从基类调用base方法.可能吗?我正在寻找任何解决方案,即使我将被迫使用其他关键字
虽然无法直接实现此目的,但您可以通过编写自己的非虚拟方法来获得相同的效果,该方法在执行某些固定操作后调用虚拟方法:
public class A
{
public void Say()
{
Console.Write("A");
SayImpl();
}
protected virtual void SayImpl()
{
// Do not write anything here:
// for the base class the writing is done in Say()
}
}
public class B : A
{
protected override void SayImpl()
{
Console.Write("B");
}
}
Run Code Online (Sandbox Code Playgroud)
现在任何继承A和实现的类SayImpl()都会A在其打印输出前加上.