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

mac2024-03-25  34

        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

最新回复(0)