Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 继承一个重载方法_C#_Inheritance_Overloading - Fatal编程技术网

C# 继承一个重载方法

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

我对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(对象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)?否。您必须重写抽象类的抽象方法。为了避免这种情况,请不要将基类抽象化。谢谢-为了正确的编码实践,我已经更改了代码以重定向继承!