欢迎光临
我们一直在努力

C# 构造函数(无参/有参/重载/this)+析构函数(终结器)|GC 垃圾回收

一、构造函数 核心概念(必背定义)

1. 构造函数特点

  • 方法名必须和类名完全一致

  • 没有返回值(连void都不写)

  • 在 new 创建对象的瞬间自动执行

  • 核心作用:创建对象、初始化成员数据(属性/字段)

2. 默认构造函数规则

  • 如果类中不写任何构造函数,编译器会自动赠送一个【空的无参构造函数】

  • 一旦自己手写了【有参构造函数】,系统不再赠送默认无参构造


二、两种构造函数 代码精讲

1. 无参构造函数(自定义初始化)

// 无参构造函数
public People()
{
Name = "张三";
this.Age = 10;
}

执行场景

People p1 = new People();
Console.WriteLine(p1.Name); // 张三

People p2 = new People();
Console.WriteLine(p2.Name); // 张三

每次 new 无参构造对象,默认初始化 Name=张三,Age=10


2. 有参构造函数(自定义赋值)

public People(string n, int a)
{
this.Name = n;
this.Age = a;
Console.WriteLine(this.Name + "———");
}

执行场景

People p3 = new People("李四",20);
Console.WriteLine( p3.Name); // 李四

People p4 = new People("王五", 20);
Console.WriteLine(p4.Name); // 王五

作用:创建对象的同时,直接给属性赋值,不用额外写代码赋值。


三、this 关键字 必考知识点

1. this 含义

this 代表当前类的当前实例对象

不是特指某一个对象,谁调用就指代谁。

2. this 两大作用

  • 区分:局部变量 和 成员属性 重名问题

  • this.属性 表示给当前对象的属性赋值

示例解析:

this.Name = n;
// this.Name → 当前对象的属性
// n → 方法传入的参数


四、构造函数重载(必考)

1. 重载条件

同一个类中,方法名相同、参数列表不同(个数/类型/顺序)

2. 本题重载

  • People() 无参构造

  • People(string n, int a) 有参构造

优点:创建对象灵活,想用默认值就无参、想自定义值就有参。


五、程序完整运行结果

张三

张三

李四———

李四

王五———

王五


六、超级易错考点(考试坑点)

  • 构造函数无返回值、名和类名一致

  • 手写有参构造后,默认无参构造会消失,需要手动写出来

  • 构造函数只会在 new 对象时自动执行一次

  • this 用来区分参数和属性重名冲突

  • 构造函数核心作用:初始化对象数据


七、简答题满分标准答案

1. 构造函数的作用?

构造函数在实例化对象时自动调用,主要用于创建对象并初始化对象的属性和字段数据。

2. this关键字的作用?

this关键字指代当前类的实例对象,用于区分成员属性和局部变量重名的问题,访问当前对象的成员。

3. 构造函数重载的好处?

提供多种对象初始化方式,既可以使用默认数据创建对象,也可以自定义数据创建对象,提高代码灵活性。


————析构函数(终结器)|GC 垃圾回收——————

一、析构函数 核心定义(必背)

析构函数(终结器):在对象被 GC 垃圾回收销毁时,系统自动调用的方法,用于释放资源、清理内存。

语法特征(硬性规则)

  • 方法名:~类名()

  • 没有返回值、没有参数、不能重载、不能手动调用

  • 只能由 GC垃圾回收器自动触发


二、你提供的代码逐行精讲

1. 析构函数定义

~People()
{
Console.WriteLine("对象被GC回收了");
}

触发时机:当前对象没有任何引用、被GC回收的一瞬间执行

2. Main 方法执行流程

People p = new People(); // 1.创建对象
p = null; // 2.切断所有引用,对象变成垃圾
GC.Collect(); // 3.强制触发GC垃圾回收
Console.ReadKey(); // 4.等待查看结果

三、代码执行原理(必考)

  • 创建对象:new People() 在堆内存开辟空间

  • 断开引用:p = null; 变量不再指向堆中的对象,对象变为【无引用垃圾对象】

  • 强制回收:GC.Collect() 手动触发垃圾回收机制

  • 自动执行析构函数:对象销毁前,系统自动调用 ~People()


  • 四、GC 垃圾回收核心知识点

    1. GC 回收规则

    堆内存中 没有任何变量引用的对象,被视为垃圾,等待GC回收。

    2. GC.Collect()

    作用:强制手动触发垃圾回收

    正常情况下GC是系统自动不定时回收,我们可以手动调用强制回收。


    五、构造函数 VS 析构函数(终极对比)

    对比项

    构造函数

    析构函数

    语法

    与类名同名

    ~类名()

    参数

    可以有参数、支持重载

    无参数、不支持重载

    执行时机

    new 对象时执行(初始化)

    对象销毁回收时执行(清理)

    作用

    创建对象、初始化数据

    释放资源、收尾清理

    控制权

    程序员可控

    GC系统自动执行


    六、高频易错坑点

    • 析构函数不能手动调用,只能GC自动调用

    • 对象必须 无任何引用 才会被回收(p=null 关键)

    • 不写 GC.Collect() 也会回收,只是时机不确定

    • 析构函数 无参、无返回值、不能重载


    七、极简背诵口诀

    构造建新初始化,析构销毁清资源;

    构造可参可重载,析构无参不能改;

    构造手动new触发,析构GC自动唤。

    ————三种构造函数 + 析构函数 终极对比——————

    一、四大函数总分类(面向对象核心四巨头)

    • 实例无参构造函数:初始化普通对象、默认赋值

    • 实例有参构造函数:自定义对象初始化数据

    • 静态构造函数:初始化静态成员、只执行一次

    • 析构函数:对象销毁、资源释放


    二、终极超级对比表(考试直接默写)

    函数类型

    语法特征

    修饰符

    参数

    执行时机

    执行次数

    核心作用

    无参实例构造

    与类名同名

    public

    无参数

    每次 new 对象执行

    new几次执行几次

    给对象默认初始化

    有参实例构造

    与类名同名

    public

    有参数

    每次 new 对象执行

    new几次执行几次

    自定义对象初始化数据

    静态构造函数

    static + 类名同名

    只能static、不能加访问修饰符

    无参数

    类第一次被使用/第一次new时触发

    全局终身只执行一次

    初始化静态字段、静态数据

    析构函数

    ~类名()

    无修饰符

    无参数

    GC回收对象时

    每个对象销毁执行一次

    释放资源、清理内存


    三、核心考点逐条拆解(必考)

    1. 实例构造函数(无参/有参)

    • 属于对象,每 new 一个对象,独立执行一次

    • 可以函数重载(多个构造函数共存)

    • 作用:初始化 非静态属性、字段

    • 一旦手写有参构造,系统自动默认无参构造消失

    2. 静态构造函数(超级重点)

    • 属于类,不属于对象

    • 禁止访问修饰符(不能写public/private)

    • 绝对无参数,不能重载

    • 无论 new 多少个对象,全程只执行唯一一次

    • 优先于实例构造函数执行

    • 专门用来初始化 静态成员

    3. 析构函数

    • 由 GC垃圾回收器自动调用,程序员无法控制时机

    • 无参、无返回值、不能重载、不能手动调用

    • 对象被置为 null、无引用后才会被回收触发

    • 作用:关闭文件、释放数据库连接、释放资源


    四、执行顺序终极标准答案(默写)

    静态构造函数 → 实例构造函数 → 对象使用 → 析构函数


    五、高频易错判断题(必背坑点)

    • 静态构造函数可以写多个?❌ 不能重载、只能一个

    • 静态构造函数可以加public?❌ 绝对不可以

    • 实例构造函数执行多次,静态构造只执行一次 ✅

    • 析构函数由程序员调用?❌ GC自动调用

    • 构造函数负责初始化,析构函数负责销毁 ✅

    • 静态构造函数先执行,实例构造后执行 ✅


    六、简答题满分模板

    1. 静态构造函数和实例构造函数的区别?

    实例构造函数属于对象,每次new对象都会执行,用于初始化实例成员,支持重载;静态构造函数属于类,全局仅执行一次,无法重载、不能加访问修饰符,用于初始化静态成员,优先于实例构造函数执行。

    2. 构造函数与析构函数的区别?

    构造函数在创建对象时执行,用于初始化对象数据,可带参数、可重载;析构函数在对象被GC回收时自动执行,用于释放资源,无参数、不可重载,由系统自动调用。


    七、终极口诀(考前速记)

    实例构造建新对象,每new一次跑一遍;

    静态构造归类所有,全局一生只跑一遍;

    析构函数收尾清场,GC回收自动相见。

    赞(0)
    未经允许不得转载:171主机测评 » C# 构造函数(无参/有参/重载/this)+析构函数(终结器)|GC 垃圾回收
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址