抽象方法覆盖抽象方法

时间:2009-11-20 07:58:27

标签: c# override abstract

public abstract class A
{
    public abstract void Process();
}

public abstract class B : A
{
    public abstract override void Process();
}

public class C : B
{
    public override void Process()
    {
        Console.WriteLine("abc");
    }
}

此代码抛出编译错误:'B'未实现继承的抽象成员'A.Process()'。

有没有办法做到这一点?

4 个答案:

答案 0 :(得分:13)

在B类中完全省略该方法.B无论如何都从A继承它,并且因为B本身是抽象的,所以你不需要再次实现它。

答案 1 :(得分:8)

在VS2008中为我工作;没有错误,没有警告。但是,没有理由在B中使用'覆盖'。这段代码是等价的:

public abstract class A
{
    public abstract void Process();
}

public abstract class B : A
{
}

public class C : B
{
    public override void Process()
    {
        Console.WriteLine("abc");
    }
}

答案 2 :(得分:3)

Alon -

这没有任何意义。首先,这确实编译得很好。其次,您在A中声明的抽象方法被继承(仍然是抽象)为B.因此,您无需在B类中声明Process()。

- 标记

答案 3 :(得分:3)

我看到这个地方的地方有时会用抽象方法覆盖非抽象虚拟方法。例如:

public abstract class SomeBaseType
{
    /* Override the ToString method inherited from Object with an abstract
     * method. Non-abstract types derived from SomeBaseType will have to provide
     * their own implementation of ToString() to override Object.ToString().
     */
    public abstract override string ToString();
}

public class SomeType : SomeBaseType
{
    public override string ToString()
    {
        return "This type *must* implement an override of ToString()";
    }
}