我在基类中有一个抽象方法,如此声明......
public abstract void StartHere();
public virtual void StartHere(string flag)
{
switch(flag)
{
default : StartHere(); break;
}
}
有没有办法改变它,以便继承子类被强制实现一个或另一个,但不是两个?目前,子类只被强制实现StartHere()。
还有一个好的做法是让默认虚拟方法指向无参数抽象吗?或者这只是毫无意义?
此方法的功能是设置类,程序员可以使用StartHere()进行简单设置,也可以使用标记为StartHere(string)的更复杂的设置。
谢谢!
答案 0 :(得分:3)
通常,参数less函数通过传递默认值来调用Parameter函数是明智的。这称为函数链。
答案 1 :(得分:1)
我更喜欢不同的设计,例如:
public void StartHere();
public virtual void StartHere(string flag)
{
StartHere();
}
因为在这种情况下,父类和子类更松散耦合:父类不必知道关于* 标志 *的任何内容,只有子类感兴趣英寸
如果您出于某种原因必须遵循当前的设计,我建议您至少更改以下内容:
switch(flag)
{
default : StartHere(); break;
}
类似于:
switch(flag)
{
"DEFAULTFLAG" : StartHere(); break;
default : throw ArgumentException(
String.Format("Unrecognized flag '{0}'!", flag)
);
}
当您错误地设置错误标记时,您更容易发现意外错误。