繁体   English   中英

继承一个重载方法

[英]Inheriting one overloaded method

我对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()因此存在明显的错误。

那么,我的问题是是否需要执行代码来避免这些错误? 是否可以使用空方法?

如果期望子类实际上未实现某些方法,则您正在滥用abstract abstract用于强制基类必须实现功能。 如果有人调用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的事实。

如果这些命令具有不同的行为,则很可能它们都不应该都属于同一抽象类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM