C#here - 是否可以使用抽象基类定义具有默认行为的方法,并在子类实现之前调用此默认值?例如:
public abstract class Base
{
public virtual int GetX(int arg)
{
if (arg < 0) return 0;
// do something here like "child.GetX(arg)"
}
}
public class MyClass : Base
{
public override int GetX(int arg)
{
return arg * 2;
}
}
MyClass x = new MyClass();
Console.WriteLine(x.GetX(5)); // prints 10
Console.WriteLine(x.GetX(-3)); // prints 0
Run Code Online (Sandbox Code Playgroud)
基本上我不想在每个子实现中都放置相同的样板...
谁可以问这个问题.我过去处理这个问题的方法是创建两个方法,一个是基类中的公共方法,另一个是受保护的抽象方法(也许是虚拟的,没有实现).
public abstract class Base
{
public int GetX(int arg)
{
// do boilerplate
// call protected implementation
var retVal = GetXImpl(arg);
// perhaps to more boilerplate
}
protected abstract int GetXImpl(int arg);
}
public class MyClass : Base
{
protected override int GetXImpl(int arg)
{
// do stuff
}
}
Run Code Online (Sandbox Code Playgroud)