首页 > 解决方案 > 在子类的子类中调用方法

问题描述

我有三个班。首先是抽象的,它被子类继承,子类又被继承。如何从抽象类中的第三类调用方法?

示例代码:

public abstract class DoSth
{
    public void DoSomething()
    {
        Console.WriteLine("I'm doing something");
        this.DoSomethingBigger();
    }
    protected abstract void DoSomethingBigger();
}

public class Writer : DoSth
{
    protected override void DoSomethingBigger()
    {
        Console.WriteLine("I'm writting");
    }
}

public class BookWriter : Writer
{
    protected new void DoSomethingBigger()
    {
        Console.WriteLine("I'm writting a book");
    }
}

如何DoSomethingBigger()BookWriter班级打电话?当我创建一个实例BookWriter并调用DoSomething()我的输出时

I'm doing something
I'm writting

但我想要

I'm doing something
I'm writting a book

标签: c#.netabstract

解决方案


通过使用关键字标记您的DoSomethingBigger方法,new您可以隐藏初始DoSomethingBigger方法而不是覆盖它。

您应该以这种方式重写代码以使其正常工作

public abstract class DoSth
{
    public void DoSomething()
    {
        Console.WriteLine("I'm doing something");
        this.DoSomethingBigger();
    }
    protected abstract void DoSomethingBigger();
}

public class Writer : DoSth
{
    protected override void DoSomethingBigger()
    {
        Console.WriteLine("I'm writting");
    }
}

public class BookWriter : Writer
{
    protected override void DoSomethingBigger()
    {
        Console.WriteLine("I'm writting a book");
    }
}

推荐阅读