我需要在调用override一个时自动调用基类方法(比如构造函数调用base).例如:
class A
{
public void Fun()
{
Console.Write("Class A!");
}
}
class B : A
{
public void Fun()
{
Console.Write("Class B!");
}
}
Run Code Online (Sandbox Code Playgroud)
我想在屏幕上看到
A级!B级!
执行下一个代码时:
B b = new B();
b.Fun();
Run Code Online (Sandbox Code Playgroud)
请问有什么人可以告诉我需要更改示例代码或者如何更好地编写以获得所需的结果?谢谢.
Las*_*olt 20
如果您不想显式调用它并因此确保A.Fun()在派生类中调用,则可以使用称为模板方法模式的东西:
class A
{
public void Fun()
{
Console.Write("Class A!");
FunProtected();
}
protected virtual void FunProtected()
{
}
}
class B : A
{
protected override void FunProtected()
{
Console.Write("Class B!");
}
}
Run Code Online (Sandbox Code Playgroud)
这会给你:
new A().Fun() -> "Class A!"
new B().Fun() -> "Class A! Class B!"
Run Code Online (Sandbox Code Playgroud)
如果您想要这样的行为,则需要更改平台/语言..NET不会自动调用基本方法.你需要明确地调用它.您的方法也需要是虚拟的,或者您将其隐藏在派生类中:
class A
{
public virtual void Fun()
{
Console.Write("Class A!");
}
}
class B : A
{
public override void Fun()
{
// call the base method which will print Class A!
base.Fun();
Console.Write("Class B!");
}
}
Run Code Online (Sandbox Code Playgroud)
现在,当你这样做:
B b = new B();
b.Fun();
Run Code Online (Sandbox Code Playgroud)
你会得到所需的结果.