我对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()
,因此存在明显的错误。
那么,我的问题是,是否需要实施代码来避免这些错误?是否允许空方法?
答案 0 :(得分:1)
如果您希望子类实际上没有实现某些方法,那么您滥用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
的事实。
如果命令具有不同的行为,那么它们可能不应该都是同一个抽象类的子类。