欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

c#构造初始化的顺序浅析

程序员文章站 2024-02-16 15:12:04
这个很基础的知识,但我至今才意识到它。想想也很失败。 直接上代码:很简单复制代码 代码如下:public class base    {&n...

这个很基础的知识,但我至今才意识到它。想想也很失败。

直接上代码:很简单

复制代码 代码如下:

public class base
    {
        int i=0;

        public base()
        {
            system.console.writeline("我是基类构造器");
        }

    }

 class program
    {
        static void main(string[] args)
        {
            base d = new base();
        }
    }


对于上面的代码。是先执行构造器,还是先初使化字段 i 变量呢?其实只要意识到这个问题,也就很容易试出来,它应当是先初使化字段 i 变量。

那么现在如果base 派生出一个子类,那它的构造顺序又是怎么样的呢?

复制代码 代码如下:

/// <summary>
    /// 基类
    /// </summary>
    public class base
    {
       public int baseint = 100;
        public base()
        {
            system.console.writeline("构造器:我是基类构造器");

        }

        private class inner
        {
            public inner()
            {
                system.console.writeline("字段:我是基类inner");
            }
        }

        /// <summary>
        /// 字段初使化
        /// </summary>
        private inner inner = new inner();
    }


   /// <summary>
   /// 子类
   /// </summary>
    class derived : base
    {
      

        public derived()
        {
            system.console.writeline("构造器:我是子类构造器");

        }


       private class inner
        {
            public inner()
            {
                system.console.writeline("字段:我是子类inner");
            }
        }

        /// <summary>
        /// 字段初使化
        /// </summary>
        private inner inner = new inner();

    }


所以说它的执行顺序为:子类字段-父类字段-父类构造器-子类构造器