加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 06:26:49 所属栏目:百科 来源:网络整理
导读:我测试了这样的代码: 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() { } p
我测试了这样的代码:
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类可以绕过它就会非常严峻.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读