如何引用C#中已实现类的抽象方法

本文关键字:实现 抽象方法 何引用 引用 | 更新日期: 2023-09-27 18:24:14

下面有一个基类(a),我一直想从继承它

class A
{
   abstract protected int foo();
   public int foo2()
   {
      //do some stuff
      foo();      
   }
}

这将不起作用,因为我不能在非抽象类中使用抽象方法。但是我如何才能实现以下目标:

继承类A的类将已经实现foo2,但继承的类必须实现foo?foo2最好是可重写的。

更新:A类不必是非抽象

如何引用C#中已实现类的抽象方法

只需使类A抽象即可。抽象类可以实现一些方法。

使foo2()成为虚拟的,则从A派生的类可以覆盖它。

我希望您有充分的理由不让A抽象化。改变现有非抽象类行为的首选方法是注入该行为。

interface IFoo
{
    int Foo();
}
class A
{
    private IFoo foo;
    public A(IFoo foo)
    {
        this.foo = foo;
    }
    public int Foo2()
    {
        //...
        return foo.Foo();            
    }
}

构建项目时会收到错误不能在非抽象类中定义抽象方法

异常

Error   1   ' .A.foo()' is abstract but it is contained in non-abstract class