c# - 为什么 C# 不支持 base.base?

标签 c# .net inheritance grandchild

我测试了这样的代码:

class A
{
    public A() { }

    public virtual void Test ()
    {
        Console.WriteLine("I am A!");
    }
}

class B : A
{
    public B() { }

    public override void Test()
    {
        Console.WriteLine("I am B!");
        base.Test();
    }
}

class C : B
{
    public C() { }

    public override void Test()
    {
        Console.WriteLine("I am C!");
        base.base.test(); //I want to display here "I am A"
    }
}

并尝试从 A 类的 C 方法 Test 调用(祖 parent 的方法)。但它不起作用。请告诉我一种调用祖 parent 虚拟方法的方法。

最佳答案

你不能 - 因为它会违反封装。如果 B 类想要在 Test 上强制执行某种不变性(或其他),如果 C 类可以绕过它,那将是相当严峻的。

如果您发现自己想要这个,您应该质疑您的设计 - 也许至少您的一个继承关系是不合适的? (我个人倾向于支持组合而不是继承,但这是一个单独的讨论。)

关于c# - 为什么 C# 不支持 base.base?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7648910/

相关文章:

c# - 使用 ClosedXML 附加到 excel 文件

c# - XmlSerializer 在构造函数中给出 FileNotFoundException

c# - Console.WriteLine() 在发布期间写入什么?

c# - 显示 "504 Gateway Timeout error"的自定义错误

c# - 返回数据时出现 WCF CommunicationException

c# - 如何通过 MVC C# Razor 使用 Google Adsense

c# - System.Drawing.Color 结构体如何初始化颜色?

c++ - 根据数据包类型更改行为,避免 switch 语句

c# - C# : Cannot implicitly convert type 'MyWidget' to 'IWidget' 中的泛型继承

java - Android:仅从父 Activity 调用子 Activity 的函数