C# 构造函数
程序员文章站
2022-03-04 12:33:51
...
C# 构造函数
* 不带任何参数的构造函数称为“默认构造函数”,每当使用 new 运算符实例化对象且不为 new 提供任何参数时,会调用默认构造函数。 ——实例构造函数
* 除非类是静态的,否则C#编译器将为无构造函数的类提供一个公共的默认构造函数,以便该类可以实例化
* 将构造函数设为私有构造函数(private),可以阻止类被实例化
* 结构类型的构造函数与类的构造函数类似,但是 structs 不能包含显式默认构造函数,因为编译器将自动提供一个显式默认构造函数。此构造函数会将 struct 中的每个字段初始化为默认值。(但是,只有使用 new 实例化 struct 时,才会调用此默认构造函数)
* 两个类和 structs 都可以定义带参数的构造函数。必须通过 new 语句或 base 语句调用带参数的构造函数,且都不需要定义默认构造函数
* 在执行构造函数块之前调用基类的构造函数:base 关键字可带参数使用,也可不带。构造函数的任何参数都可用作 base 的参数,或用作表达式的一部分。
* 派生类中,如果不使用 base 关键字来显式调用基类构造函数,则将隐式调用默认构造函数(若有)下面俩声明等效:
public Manager(int initialdata) { //Add further instructions here. }
public Manager(int initialdata) : base() { //Add further instructions here. }
* 若基类没有提供默认构造函数,派生类必须使用 base 显式调用基类构造函数
* 构造函数可以使用 this 关键字调用同一对象中的另一构造函数。和 base 一样,this 可带参数使用也可不带,构造函数中的任何参数。。。(与 base 用法一致)
实例构造函数在创建类的对象时,就会调用实例构造函数私有构造函数它通常用于只包含静态成员的类中。如果类具有一个或多个私有构造函数而没有公共构造函数,则其他类(除嵌套类外)无法创建该类的实例
- 声明空构造函数可阻止自动生成默认构造函数(注意:如果不对构造函数使用访问修饰符,则在默认情况下它认为私有构造函数。但是通常会显式的使用 private 修饰符来清楚的表明该类不能被实例化)
- 当没有实例字段或实例方法时或者当调用方法以获得类的实例时,私有构造函数可用于阻止创建类得实例。如果类中得所有方法都是静态的,可考虑使整个类称为静态的。
静态构造函数由static关键字修饰,而并且没有public、private修饰,更没有参数特点:
- 静态构造函数除static外无其它修饰关键字,因为该构造函数并不是有程序员调用的,而是由.Net框架在合适的时机调用的
- 静态构造函数没有参数,因为框架不可能知道我们需要在函数中添加什么参数,所以规定不能使用参数
- 静态构造函数必须加上static,否则跟普通构造函数无异
- 静态构造函数中不能实例化实例变量(变量可以分为类级别和实例级别的变量,其中类级别的有static关键字修饰)
- 静态构造函数调用时机,是在类被实例化或者静态成员被调用的时候进行调用,并且是有.Net框架来调用静态构造函数来初始化静态成员变量(这一点是精华)
- 一个类有且只能有一个静态构造函数
- 无参数的静态构造函数和无参数的构造函数是可以并存的。因为他们一个属于类级别,一个属于实例级别,并不冲突
- 静态构造函数只会被执行一次。
- 若未在类中自定义静态构造函数,那么框架会自动生成一个默认的构造器
继承链中构造器执行顺序:
1. 子-静 —>
2. 父-静 —>
3. 父-实 —>
4. 子-实
下一篇: c# 构造函数