2017-05-10 77 views
0

我对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

基类(其他类继承的类)应该只有定义其他类共享的方法。 – EpicKip

+0

也许'public abstract string Execute(object o = null);'? –

+0

不需要。您将不得不重写抽象类的抽象方法。 为了避免它不让基类作为抽象。 – Manoj

回答

2

如果您希望子类没有实际实现某些方法,那么您会滥用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

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

+0

谢谢 - 我已经改变了代码以重新定位继承以进行正确的编码实践! –