继承一个重载方法

时间:2017-05-10 06:56:58

标签: c# inheritance overloading

我对C#和OOP很新,我对继承有疑问。

说我有:

public abstract class Command
{
    protected Command()
    {
    }

    public abstract string Execute();

    public abstract string Execute(object o);
}

public class CommandA : Command
{
    public override string Execute()
    {
    }
}

public class CommandB : Command
{
    public override string Execute(object o)
    {
    }
}

由于CommandA未实施Execute(object o)CommandB未实施Execute(),因此存在明显的错误。

那么,我的问题是,是否需要实施代码来避免这些错误?是否允许空方法?

1 个答案:

答案 0 :(得分:1)

如果您希望子类实际上没有实现某些方法,那么您滥用abstractabstract用于强制基类必须实现该功能。有人打电话给new CommandB().Execute()会怎么样?

在某些情况下,设计可能不正确,您最终会处于您所处的状态。在这些情况下,它有点常见(虽然在我看来是代码味道),但要执行以下操作:

public class CommandA : Command
{
    public override string Execute()
    {
    }

    public override string Execute(object o)
    {
        throw new NotImplementedException();
    }
}

一种更清洁的方法:

public abstract class Command
{
    protected Command()
    {
    }

    public abstract string Execute(object o = null);
}

虽然您仍然需要处理某人可能将对象传递给CommandA的事实。

如果命令具有不同的行为,那么它们可能不应该都是同一个抽象类的子类。