首页 > 编程笔记 > C#笔记 阅读:36

C#析构函数的用法(附带实例)

如果读者设计.NET Framework,在类中可以设计析构(destructor)方法,假设类名称是 Person,则建构方法的名称是 Person(),析构方法的名称是 ~Person(),也就是在建构方法名称前加上“~”符号,即是析构方法。

C++的程序概念中,一个类如果不再需要,可以使用析构方法将此类销毁,然后回收内存空间,但是如果程序设计师忘记,则会造成内存的浪费。

在 Java 和 C# 的程序概念中,有内存自动回收机制,我们不必设计析构方法,其自动回收机制会自行处理。

【实例】请创建 .NET Framework 的方案,如下所示:


请按右下方的“下一步”按钮,接着步骤则与之前一样,下列是此程序实例:
using System;
namespace zhangsan
{
    class Person
    {
        public string name;
        public void getName()
        {
            Console.WriteLine($"姓名 : {name}");
        }
        ~Person()    // Destructor
        {
            Console.WriteLine("调用 Destructor");
        }
    }
    internal class Program
    {
        static void Main(string[] args)
        {
            Person p = new Person();
            p.name = "zhangsan";
            p.getName();
        }
    }
}
运行结果为:

姓名 : zhangsan
调用 Destructor

从上述执行结果可以看到程序执行结束前,.NET Framework 会自动调用 ~Person(),所以可以看到输出“调用 Destructor”。

但是在 .NET 6.0(或 7.0)下,程序结束前不会调用 ~Person(),所以将看不到上述“调用 Destructor”信息,读者可以参考下面的实例。

【实例 2】使用 .NET 6.0 重新设计实例 1。
Person p = new Person();
p.name = "zhangsan";
p.getName();

class Person
{
    public string name;
    public void getName()
    {
        Console.WriteLine($"姓名 : {name}");
    }
    ~Person()    // Destructor
    {
        Console.WriteLine("调用 Destructor");
    }
}
执行结果为:

姓名 : zhangsan


使用析构方法需注意下列事项:

相关文章