Amor-ztt

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

思考!
在类中定义一个字段并给它赋值,

int a=1;
在这个类的构造函数值重新给它赋值
a =9;
那么最后这个a的值是什么呢?

这就涉及到构造函数的执行顺序了

要记住!!
创建类的实例时,构造函数的4个执行步骤
第一步:进入构造函数

第二步:如果有参数,就(给有参构造函数)传参,如果没有就不传

第三步:执行构造函数的初始化列表!!!给这个类中所有的成员开辟内存空间,给这个类中的所有字段赋初值,这时发生a=1,如果只是在类中定义 int a;而没有给a初始化,则编译器默认将 【 值类型=0,引用类型=null 】。至此,这个实例才真实存在了,这个类才真正有了意义,在此之前,没有这个类的实体。
要记住!!类永远都只是一张图纸,不创建实例,这个类就不存在。
在创建完实例对象,实例对象出生之后,我们才可以通过实例拿到这个类里面的所有 公有、非静态的成员。

第四步:进入构造函数的函数体。这时候就可以对这个类的字段或属性赋值,或者调用类中的方法。

重点!!!
构造函数的值会覆盖字段初始化后的值

`

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace myprogrom
{
    class Program
    {
        int b=1;
        public Program()
        {
            b = 9;  
        }
        //构造函数的值会覆盖字段初始化后的值
        //构造函数的值会覆盖字段初始化后的值
        //构造函数的值会覆盖字段初始化后的值
        static void Main(string[] args)
        {
            Program p1 = new Program(); 

            Console.WriteLine(p1.b);       // 输出 9

            Console.WriteLine(Myprogram.a);  //输出 2     //静态字段

            Console.WriteLine(new Myprogram().aa); //输出 3  //可以直接用无名Myprogram的实例去访问这个类中的公有字段
        }

    }
    class Myprogram
    {
        static public int a = 1;
        public int aa=1;
        static Myprogram()
        {
            a = 2;          // !!静态构造函数只能操作 静态的字段、属性、方法
        }
       public Myprogram()
        {
            aa = 3;
        }
    }
}
`
posted on 2023-04-11 00:22  小颜七七  阅读(403)  评论(0编辑  收藏  举报