平时做技术实践时,很多问题不是概念不会,而是细节没串起来。拿“C#构造函数 + 析构函数的实现方法”来说,它看着像小点,放到项目里常会牵出环境、配置、兼容性和维护成本。下面按实际采用顺序,把思路、关键写法和容易踩坑的地方讲清楚,便于大家直接对照操作。
如果类中不写任何构造函数,编译器会自动赠送一个 无参空构造函数。
一旦手写了有参构造,编译器不再赠送默认无参构造。
new 对象不传参数时执行,用来统一默认初始化数据
public class People
{
public string Name { get; set; }
public int Age { get; set; }
//无参构造函数
public People()
{
Name = "张三";
this.Age = 10;
}
}
测试结果:
People p1 = new People();
Console.WriteLine(p1.Name); //张三
People p2 = new People();
Console.WriteLine(p2.Name); //张三
用来 新建对象时自定义初始化数据
//有参构造函数
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 代表当前类的当前实例对象
this.Age:代表当前对象的 Age 属性Age:就近原则,优先方法内部参数public People(string Age, int a)
{
this.Age = Age;
// this.Age:对象属性
// Age:方法参数
}
前缀加 ~,无得到值、无参数、不能重载
public class People
{
//析构函数
~People()
{
Console.WriteLine("对象被GC回收");
}
}
当对象 没有任何变量引用 时,GC垃圾回收机制会回收对象,触发析构函数。
People p = new People();
p = null; // 断开引用,对象变成垃圾
GC.Collect(); // 强制触发垃圾回收
Console.ReadKey();
对比 | 构造函数 | 析构函数 |
|---|---|---|
执行时机 | new 对象时 自动执行 | 对象被GC回收时 自动执行 |
作用 | 新建对象、初始化数据 | 销毁对象、释放资源 |
语法 | 和类名同名 | 类名前加 ~ |
是否可重载 | 能够重载(多个构造) | 不可重载,只能一个 |
从实现思路看,总的来说,C#构造函数适合结合实际项目边做边理解。先抓住核心思路,再逐步补上细节和边界处理,最后效果会更稳定,也更容易复用。