c# - 使用抽象重写并调用基类

标签 c#

考虑以下因素 -

void Main()
{
    var c = new C();
    c.Print();
}

public abstract class A
{
    public virtual void Print()
    {
        Console.WriteLine("I'm in A!");
    }
}

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

public class C : B
{
    public override void Print()
    {
        Console.WriteLine("I'm in C!");

        base.Print();
    }
}

这当然不会编译,因为它认为我正在尝试调用 B 的 print 方法,这是抽象的。我想做的是调用 C 的 print 方法,然后让它调用基础的 print 方法,这将“链接”回 A 的 print 方法。我希望输出是 -

I'm in C!
I'm in A!

这样做可能吗?我做错了什么?

编辑:我想补充一点,上面代码的要点是我试图强制任何扩展 B 的人实现自己的 Print 方法。

最佳答案

嗯,你可以这样做

public abstract class A
{
    public virtual void Print()
    {
        Console.WriteLine("I'm in A!");
    }
}

public abstract class B : A
{
    public override void Print()
    {
        base.Print();
    }
}

public class C : B
{
    public override void Print()
    {
        Console.WriteLine("I'm in C!");

        base.Print();
    }
}

这是有效的

public abstract class A
{
    public virtual void Print()
    {
        Console.WriteLine("I'm in A!");
    }
}

public abstract class B : A
{
}

public class C : B
{
    public override void Print()
    {
        Console.WriteLine("I'm in C!");

        base.Print();
    }
}

关于c# - 使用抽象重写并调用基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19173101/

相关文章:

c# - 如何在 5 次不成功尝试后锁定用户帐户

c# - 如何以编程方式将 Azure WebJob 标记为失败?

c# - 在 .NET Core 中使用 JWT token 或 API key 的授权机制

C# List<object> 到 Dictionary<key, <object>>

c# - StackExchange.Redis.RedisTimeoutException - 由于问题人们如何解决它?

c# - 网络客户端编码

c# - C# 的常见操作成本?

c# - ASP.Net MVC2 DropDownListFor

c# - 带有 postgres 的 dotnet core 2.2 EntityFramework

c# - 直接导入到 CSS for asp.net 元素的颜色选择实用程序。