微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我测试了这样的代码
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"
    }
}

并试图从C方法调用A类(祖父母的方法).但它不行.请告诉我一种方法调用一个祖父母的虚拟方法.

解决方法

你不能 – 因为它会违反封装.如果B类想要在Test上强制执行某种不变量(或任何),那么C类可以绕过它就会非常严峻.

如果你发现自己想要这个,你应该质疑你的设计 – 也许至少有一个你的继承关系是不合适的? (我个人试图鼓励组合从继承开始,但这是一个单独的讨论.)

原文地址:https://www.jb51.cc/csharp/95574.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐