C# 继承一个重载方法
我对C#和OOP相当陌生,我对继承有一个问题 假设我有:C# 继承一个重载方法,c#,inheritance,overloading,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 Exe
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(对象o)
和CommandB
未实现Execute()
,因此存在明显的错误
那么,我的问题是,我是否需要实现代码来避免这些错误?允许使用空方法吗?如果您希望子类不能实际实现某些方法,那么您就滥用了
abstract
<代码>抽象用于强制基类必须实现该功能。如果有人调用了newcommandb().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
如果命令具有如此不同的行为,它们很可能不应该都是同一个抽象类的子类。基类(其他继承的类)应该只定义其他类共享的方法。可能
公共抽象字符串执行(object o=null)代码>?否。您必须重写抽象类的抽象方法。为了避免这种情况,请不要将基类抽象化。谢谢-为了正确的编码实践,我已经更改了代码以重定向继承!