在C#中,可以标记虚方法摘要以强制继承类来实现它。
class A
{
public virtual void Method()
{
Console.WriteLine("A method call");
}
}
abstract class B : A
{
// Class inherited from B are forced to implement Method.
public abstract override void Method();
}
我想从继承自A
的类中调用Method
B
的实现。
class C : B
{
public override void Method()
{
// I would like to call A implementation of Method like this:
// base.base.Method();
}
}
我发现这样做的最好方法是在A实现中添加一个受保护的方法“MethodCore”,并在需要时调用它。
class A
{
public virtual void Method()
{
MethodCore();
}
protected void MethodCore()
{
Console.WriteLine("A method call");
}
}
abstract class B : A
{
public abstract override void Method();
}
class C : B
{
public override void Method()
{
MethodCore();
}
}
还有其他办法吗?
答案 0 :(得分:1)
我发现这样做的最好方法是在A实现中添加一个受保护的方法“MethodCore”,并在需要时调用它。
是。由于您无法使用abstract
调用base
方法,因此所有可能的解决方案都要求您最终使用Method
实例在A
中调用A
。
也就是说,看起来您正在寻找一种在Method
中提供B
的默认实现的方法,以便B
的任何子类都可以没有实现该方法应该只使用A
中的实现。更好的解决方案是不在Method
中将abstract
标记为B
。相反,使用Method
<{1}} B
中的Method
A
重定向到base.Method()
{/ 1}}
abstract class B : A {
// Class inherited from B are forced to implement Method.
public virtual void Method() {
base.Method()//calls Method in A
}
}
这样,任何想要从B
拨打Method
的{{1}}的子类都可以简单地说A
。