zoukankan      html  css  js  c++  java
  • 在一个类型的继承体系中,成员的构造顺序

    先看代码,写出结果

      class A
         {
              public A()
               {
                    PrintFields();
               }
              public virtual void PrintFields(){}
          }
          class B:A
          {
               int x=1;
               int y;
               public B()
            {
                   y=-1;
               }
               public override void PrintFields()
               {
                   Console.WriteLine("x={0},y={1}",x,y);
               }

        }

    问题,当执行如下代码时,输出的结果是多少?
    B b =new B();
    b.PrintFields();

    基本原理:一个带有基类的类型的构造顺序是:先执行成员变量的初始化表达式,然后执行父类的构造,最后调用自己的构造方法。
    所以,结果是
    image

    再举一个例子,加深对这个原理的印象
    先看继承结构
    public class Ref
        {
            public Ref(string s)
            {
                Console.WriteLine(s);
            }
        }
        public class Base
        {
            public Ref basestring = new Ref("Base初始化表达式");
            public Base()
            {
                Console.WriteLine("Base构造方法");
            }
        }
        public class A:Base
        {
            public Ref astring = new Ref("A初始化表达式");
            public A():base()
            {
                Console.WriteLine("A构造方法");
            }
        }
        public class B : A
        {
            public Ref bstring = new Ref("B初始化表达式");
            public B(): base()
            {
                Console.WriteLine("B构造方法");
            }
        }
        public class C : B
        {
            public Ref cstring = new Ref("C初始化表达式");
            public C(): base()
            {
                Console.WriteLine("C构造方法");
            }
        }

    调用如下代码的输出是
    C c = new C();

    image


    最后,向你推荐这个小工具,可以运行片断式的代码,而不用打开Visual Studio 启动一个工程
    image

    如果你怀疑自己的判断,拿起这个小工具,执行一下代码,就明白了。

  • 相关阅读:
    PAT (Advanced Level) Practice 1071 Speech Patterns (25分)
    PAT (Advanced Level) Practice 1070 Mooncake (25分)
    PAT (Advanced Level) Practice 1069 The Black Hole of Numbers (20分)
    PAT (Advanced Level) Practice 1074 Reversing Linked List (25分)
    PAT (Advanced Level) Practice 1073 Scientific Notation (20分)
    第一次冲刺个人总结01
    构建之法阅读笔记01
    人月神话阅读笔记01
    四则运算2
    学习进度条(软件工程概论1-8周)
  • 原文地址:https://www.cnblogs.com/JamesLi2015/p/1661768.html
Copyright © 2011-2022 走看看