一、构造函数 核心概念(必考)
1. 定义特点
-
方法名必须和类名完全一致
-
没有返回值(连void都不写)
-
在 new 对象的一瞬间自动执行
-
作用:创建对象、初始化字段/属性数据
2. 默认构造函数
如果类中不写任何构造函数 ,编译器会自动赠送一个 无参空构造函数。
一旦手写了有参构造,编译器不再赠送默认无参构造。
二、两种构造函数实战
1. 无参构造函数
new 对象不传参数时执行,用于统一默认初始化数据
cs
public class People
{
public string Name { get; set; }
public int Age { get; set; }
//无参构造函数
public People()
{
Name = "张三";
this.Age = 10;
}
}
测试结果:
cs
People p1 = new People();
Console.WriteLine(p1.Name); //张三
People p2 = new People();
Console.WriteLine(p2.Name); //张三
2. 有参构造函数
用于 创建对象时自定义初始化数据
cs
//有参构造函数
public People(string n, int a)
{
this.Name = n;
this.Age = a;
Console.WriteLine(this.Name + "---------");
}
测试结果:
cs
People p3 = new People("李四", 20);
Console.WriteLine(p3.Name); //李四
People p4 = new People("王五", 20);
Console.WriteLine(p4.Name); //王五
三、构造函数重载
一个类中多个构造函数共存(参数个数/参数类型不同)
-
People() → 无参构造
-
People(string n, int a) → 双参构造
优势:创建对象灵活,想默认初始化就无参、想自定义就有参
四、this 关键字 核心作用
this 代表当前类的当前实例对象
-
区分:局部参数 和 全局属性/字段 重名问题
-
this.Age:代表当前对象的 Age 属性 -
Age:就近原则,优先方法内部参数
cs
public People(string Age, int a)
{
this.Age = Age;
// this.Age:对象属性
// Age:方法参数
}
五、析构函数(终结器)
1. 语法格式
前缀加 ~,无返回值、无参数、不能重载
cs
public class People
{
//析构函数
~People()
{
Console.WriteLine("对象被GC回收");
}
}
2. 执行时机
当对象 没有任何变量引用 时,GC垃圾回收机制会回收对象,触发析构函数。
3. 手动强制GC回收
cs
People p = new People();
p = null; // 断开引用,对象变成垃圾
GC.Collect(); // 强制触发垃圾回收
Console.ReadKey();
4. 析构函数特点
-
由系统自动调用,无法手动调用
-
作用:释放资源、清理内存
-
无法重载、无参无返回值
六、构造函数 VS 析构函数 对比(必背)
| 对比 | 构造函数 | 析构函数 |
|---|---|---|
| 执行时机 | new 对象时 自动执行 | 对象被GC回收时 自动执行 |
| 作用 | 创建对象、初始化数据 | 销毁对象、释放资源 |
| 语法 | 和类名同名 | 类名前加 ~ |
| 是否可重载 | 可以重载(多个构造) | 不可重载,只能一个 |
七、终极总结口诀
-
构造生对象,析构毁对象
-
无参构造初始化默认值,有参构造自定义赋值
-
this 区分参数和属性重名,指代当前对象
-
p=null 断开引用,GC.Collect() 强制回收
-
手写有参构造,编译器不再提供默认无参构造