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

时间:2015-11-25 15:11:54

标签: c# inheritance abstract

我在下面有一个基类(A),我总是希望继承自

class A
{
   abstract protected int foo();

   public int foo2()
   {
      //do some stuff

      foo();      
   }

}

这不起作用,因为我在非抽象类中没有抽象方法。但是我怎样才能实现以下目标:

继承A类的

类已经实现了foo2但是继承的类必须实现foo吗? foo2最好是可以覆盖的。

更新:A类不一定是非抽象的

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

我希望你有充分的理由不让A抽象。更改现有非抽象类行为的首选方法是inject该行为。

interface IFoo
{
    int Foo();
}

class A
{
    private IFoo foo;

    public A(IFoo foo)
    {
        this.foo = foo;
    }

    public int Foo2()
    {
        //...
        return foo.Foo();            
    }
}

答案 2 :(得分:0)

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

例外

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