• 类继承中的 隐藏和重写的 区别


    我看先看一个例子:

    public class A
    {
        public int a = 10;
        public virtual void Fun1()
        {
            Console.WriteLine("1");  -------A1
        }

        public virtual void Fun3()
        {
            Console.WriteLine(this.a); -------A2

        }
        public void Fun2()
        {
            Fun3();          -------A3
        }
    }
    public class B : A
    {
        public new int a = 20;
        public new void Fun3()
        {
            Console.WriteLine(this.a); --------------B1
         }

        public override void Fun1()
        {
            Console.WriteLine("3");------------------B2
        }

    }

    当我们执行B b = new B();

    b.Fun2();的时候

    执行的顺序是

    A3 -----> A2 输出的结果是10

    步骤A3中的Fun3() 实际是 this.Fun3(),也就是当前实例的方法。

    当调用的Fun2() 在B中没有的时候 就去父类中查找,找到后就把B类的对应当作A的实例来看,

    调用的是A的方法 使用的是A的变量

    我们可以修改一下代码,加上this public void Fun2()
        {
            this.Fun3();          -------A3
        }

     然后debug后发现 this 的情况是

    所以在Fun3被隐藏的情况下,仍然调用了当前类A自己的Fun3方法

    如果继续改代码

     public override void Fun3()
        {
            Console.WriteLine(this.a); --------------B1
         }

    这时候执行B b = new B();b.Fun2();的时候,

    唯一变化的就是 执行完A3 后 执行 B1

    这是因为A类的Fun3被重写了,当对象试图去调用A类的Fun3的时候,发现Fun3有被重写了,于是调用了被重写后的方法。

    有不妥当的地方,请批评指正。

  • 相关阅读:
    WeX5开发指南
    移动web app开发框架
    [转]10款 Web 开发常备工具
    为兴趣求职:如何学习UI框架,请将你的看法观点写在评论下面
    10 个顶尖的 Linux 开源人工智能工具
    【转】编写Chrome扩展程序
    HDOJ 4455 Substrings 递推+树状数组
    iOS开发人员:事实上你还有非常多东西须要学
    鸡肋的JdbcRDD
    OFbiz实体引擎
  • 原文地址:https://www.cnblogs.com/wanglg/p/3945233.html
Copyright © 2020-2023  润新知