5
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

4 回答 4

13

只需在 B 类中完全省略该方法。B 无论如何都从 A 继承它,并且由于 B 本身是抽象的,因此您不需要再次显式地实现它。

于 2009-11-20T08:08:30.770 回答
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");
    }
}
于 2009-11-20T08:10:38.613 回答
3

阿隆 -

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

- 标记

于 2009-11-20T08:17:54.607 回答
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()";
    }
}
于 2009-11-20T08:36:13.910 回答