跳到主要内容

C# 对象生命周期

介绍

在 C# 中,对象是面向对象编程的核心。每个对象都有一个生命周期,从创建到销毁。理解对象的生命周期对于编写高效、可靠的代码至关重要。本文将详细介绍 C# 中对象的生命周期,包括对象的创建、使用和销毁过程。

对象的创建

在 C# 中,对象是通过 new 关键字创建的。当你使用 new 关键字时,C# 运行时会在堆上分配内存,并调用构造函数来初始化对象。

csharp
class Person
{
public string Name { get; set; }

public Person(string name)
{
Name = name;
}
}

Person person = new Person("Alice");

在上面的代码中,我们创建了一个 Person 类的实例 personnew Person("Alice") 语句在堆上分配了内存,并调用了 Person 类的构造函数来初始化 Name 属性。

对象的使用

一旦对象被创建,你就可以使用它来调用方法、访问属性等。对象的使用阶段是对象生命周期中最长的部分。

csharp
Console.WriteLine(person.Name); // 输出: Alice

在这个例子中,我们访问了 person 对象的 Name 属性,并输出了它的值。

对象的销毁

在 C# 中,对象的销毁是由垃圾回收器(Garbage Collector, GC)自动管理的。当一个对象不再被引用时,垃圾回收器会在适当的时候回收该对象所占用的内存。

csharp
person = null; // 将 person 引用设置为 null

在上面的代码中,我们将 person 引用设置为 null,这意味着 person 不再指向任何对象。此时,垃圾回收器可以回收之前分配给 person 对象的内存。

备注

垃圾回收器的工作是自动的,你无法精确控制对象何时被销毁。但你可以通过将对象引用设置为 null 来提示垃圾回收器该对象可以被回收。

实际案例

假设你正在开发一个简单的学生管理系统。你需要创建 Student 类来表示学生,并在系统中管理这些学生对象。

csharp
class Student
{
public string Name { get; set; }
public int Age { get; set; }

public Student(string name, int age)
{
Name = name;
Age = age;
}
}

List<Student> students = new List<Student>();
students.Add(new Student("Bob", 20));
students.Add(new Student("Charlie", 22));

// 使用学生对象
foreach (var student in students)
{
Console.WriteLine($"{student.Name} is {student.Age} years old.");
}

// 销毁学生对象
students.Clear(); // 清空列表,所有学生对象不再被引用

在这个案例中,我们创建了多个 Student 对象,并将它们存储在 List<Student> 中。当 students.Clear() 被调用时,列表中的所有学生对象都不再被引用,垃圾回收器可以在适当的时候回收这些对象。

总结

C# 中的对象生命周期包括对象的创建、使用和销毁。理解这些阶段对于编写高效、可靠的代码非常重要。通过合理管理对象的引用,你可以帮助垃圾回收器更有效地回收内存。

附加资源

练习

  1. 创建一个 Car 类,包含 MakeModel 属性。创建多个 Car 对象,并将它们存储在一个列表中。然后清空列表,观察垃圾回收器如何回收这些对象。
  2. 研究 IDisposable 接口,并尝试在 Car 类中实现它,以便手动释放资源。

通过完成这些练习,你将更深入地理解 C# 中对象的生命周期。