我不确定您的问题是否是“使用什么”,但我建议使用接口和抽象类:
public interface IProblem {
void Solve();
void CheckArguments();
}
public abstract class Problem : IProblem {
public abstract void Solve();
public void CheckArguments() {
...
}
}
public class EasyProblem : Problem
{
public override void Solve()
{
....
}
}
这样,检查参数在基类中实现,所有派生类都实现 IProblem,每个派生类都必须实现 Solve。
如果你省略了接口并且只支持派生自 的类Problem
,你将确保给定的类不能给它自己的CheckArguments()
.
public abstract class Problem {
public abstract void Solve();
public void CheckArguments() {
...
}
}
public class EasyProblem : Problem
{
public override void Solve()
{
....
}
}
...
static Main(string[] args)
{
List<Problem> problemsToSolve = ...
foreach(var problem in problemsToSolve)
{
problem.CheckArguments();
problem.Solve();
}
}