在子类中强制实现两种方法之一

时间:2012-03-28 10:37:58

标签: c# methods implementation abstract

我在基类中有一个抽象方法,如此声明......

public abstract void StartHere();
public virtual void StartHere(string flag)
{   
    switch(flag)
    {
        default : StartHere(); break;
    }
}

有没有办法改变它,以便继承子类被强制实现一个或另一个,但不是两个?目前,子类只被强制实现StartHere()。

还有一个好的做法是让默认虚拟方法指向无参数抽象吗?或者这只是毫无意义?

此方法的功能是设置类,程序员可以使用StartHere()进行简单设置,也可以使用标记为StartHere(string)的更复杂的设置。

谢谢!

2 个答案:

答案 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)
            );
    }

当您错误地设置错误标记时,您更容易发现意外错误。