构造函数、static静态构造函数(C#特有)、对象初始化语句(C#特有)

        C#中的构造函数与C++中类似,如果希望能从类的外部创建类的实例,需要将构造函数声明为public,如果类的声明中没有显式的提供实例构造函数,那么编译器会提供一个隐式的默认构造函数,它没有参数,方法体为空,如果你为类声明了任何构造函数,那么编译器将不会为该类定义默认构造函数,这时如果不主动声明默认构造函数的话,当在使用不带参数的构造函数创建新的实例时,则会出错。

静态构造函数(C++中不存在,C#中存在,可以初始化静态字段)

构造函数也可以声明为static,实例构造函数初始化类的每个新实例,而static构造函数初始化类级别的项,通常,静态构造函数初始化类的静态字段

静态构造函数与实例构造函数的不同:
(1)静态构造函数声明中使用static关键字
(2)类只能有一个静态构造函数,而且不能带参数
(3)静态构造函数不能有访问修饰符

静态构造函数的使用:
(1)类既可以有静态构造函数也可以有实例构造函数
(2)如同静态方法,静态构造函数不能访问所在类的实例成员,因此也不能使用this访问器
(3)不能从程序中显示调用静态构造函数,系统会自动调用它们在类的任何实例被创建之前、类的任何静态成员被引用之前,例如new个对象的时候,系统会先调用到静态构造函数(在已经定义的情况下),然后在调用默认构造函数

    class Program
    {
        static Program()
        {
            Console.WriteLine(999);  //先打印

        }
        public Program()
        {
            Console.WriteLine(100);  //后打印
        }
        static void Main(string[] args)
        {
            Program p = new Program();
        }
    }

对象初始化语句(C++中没有)

一般情况下,对象创建表达式由关键字new后面跟着一个类构造函数及其参数列表组成,对象初始化语句扩展了创建语法,在表达式的尾部放置了一组成员初始化语句,这允许在创建新的对象时,设置字段和属性的值。,俩种形式,一种包括构造函数的参数列表,一种不包括。

初始化语句发生在构造方法执行之后,因此在构造方法中设置的值会在之后对象初始化中重置为其他的值

    class Program
    {
        public int a = 1;
        public int b = 2;
        Program()
        {
            a = 11;
            b = 22;
        }
        static void Main(string[] args)
        {
            Program p = new Program();
            Program p2 = new Program { a = 10, b = 20 };
            Console.WriteLine(p.a);  //11
            Console.WriteLine(p.b);  //22
            Console.WriteLine(p2.a); //10
            Console.WriteLine(p2.b); //20
        }
    }

在程序中加断点调试可以看到在执行p2的构造过程时,先执行的int a=1; int b=2;然后在执行的Program构造函数,最后在进行的对象初始化语句,相当于a、b被赋值了3次,最后的值才为a=10 b=20

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值