在類裡寫:
public BaseClass()
{
...........
...........
}
~BaseClass()
{
........
}
這裡的“~”是什麼意思啊?高手指教
public BaseClass()
{
...........
...........
}
~BaseClass()
{
........
}
這裡的“~”是什麼意思啊?高手指教
解决方案 »
- 如何实现outlook2007添加联系人的功能
- 读取图片保存到数据库,在ListView中显示
- 身份证计算年龄
- 加急,请高手们帮忙啊!~~~~~
- Array.resize后,旧的数组如何释放?
- 修饰符問題
- 新手问题,在XSLT中怎么插入空格
- winform如何實現通過按"首條"、"上一條"、"下一條"、"最後一條"按鈕來取dataset中table行?
- C#调用DWMapi制作出Aero效果的窗口,怎么让其控件上的文本显示为黑色?
- ===破了一个屏幕取 词(GetWord),谁告诉我怎么在C#引用它的.dll===
- excel的save方法问题,恳请高手解答。
- 关于线程,我到底错在哪里了? 很急
析构函数(C# 编程指南)
析构函数用于析构类的实例。备注
不能在结构中定义析构函数。只能对类使用析构函数。一个类只能有一个析构函数。无法继承或重载析构函数。无法调用析构函数。它们是被自动调用的。析构函数既没有修饰符,也没有参数。例如,下面是类 Car 的析构函数的声明:C# 复制代码
class Car
{
~ Car() // destructor
{
// cleanup statements...
}
} 该析构函数隐式地对对象的基类调用 Finalize。这样,前面的析构函数代码被隐式地转换为: 复制代码
protected override void Finalize()
{
try
{
// cleanup statements...
}
finally
{
base.Finalize();
}
}
这意味着对继承链中的所有实例递归地调用 Finalize 方法(从派生程度最大的到派生程度最小的)。注意
不应使用空析构函数。如果类包含析构函数,Finalize 队列中则会创建一个项。调用析构函数时,将调用垃圾回收器来处理该队列。如果析构函数为空,则只会导致不必要的性能丢失。
程序员无法控制何时调用析构函数,因为这是由垃圾回收器决定的。垃圾回收器检查是否存在应用程序不再使用的对象。如果垃圾回收器认为某个对象符合析构,则调用析构函数(如果有)并回收用来存储此对象的内存。程序退出时也会调用析构函数。可以通过调用 Collect 强制进行垃圾回收,但大多数情况下应避免这样做,因为这样会导致性能问题。有关更多信息,请参见强制垃圾回收。使用析构函数释放资源
通常,与运行时不进行垃圾回收的编程语言相比,C# 无需太多的内存管理。这是因为 .NET Framework 垃圾回收器会隐式地管理对象的内存分配和释放。但是,当应用程序封装窗口、文件和网络连接这类非托管资源时,应当使用析构函数释放这些资源。当对象符合析构时,垃圾回收器将运行对象的 Finalize 方法。资源的显式释放
如果您的应用程序在使用昂贵的外部资源,则还建议您提供一种在垃圾回收器释放对象前显式地释放资源的方式。可通过实现来自 IDisposable 接口的 Dispose 方法来完成这一点,该方法为对象执行必要的清理。这样可大大提高应用程序的性能。即使有这种对资源的显式控制,析构函数也是一种保护措施,可用来在对 Dispose 方法的调用失败时清理资源。有关清理资源的更多详细信息,请参见下列主题:清理非托管资源 实现 Dispose 方法 using 语句(C# 参考) 示例
下面的示例创建三个类,这三个类构成了一个继承链。类 First 是基类,Second 是从 First 派生的,而 Third 是从 Second 派生的。这三个类都有析构函数。在 Main() 中,创建了派生程度最大的类的实例。注意:程序运行时,这三个类的析构函数将自动被调用,并且是按照从派生程度最大的到派生程度最小的次序调用。C# 复制代码
class First
{
~First()
{
System.Console.WriteLine("First's destructor is called");
}
}class Second: First
{
~Second()
{
System.Console.WriteLine("Second's destructor is called");
}
}class Third: Second
{
~Third()
{
System.Console.WriteLine("Third's destructor is called");
}
}class TestDestructors
{
static void Main()
{
Third t = new Third();
}
} 输出
Third's destructor is called Second's destructor is called First's destructor is called C# 语言规范
有关更多信息,请参见 C# 语言规范中的以下各章节:1.6.6.6 析构函数10.2.7.4 为析构函数保留的成员名称10.12 析构函数(类)11.3.9 析构函数(结构)请参见
参考
IDisposable概念
C# 编程指南其他资源
构造函数(C# 编程指南)
垃圾回收
要提出有关“帮助”或本产品其他功能的建议或错误报告,请转到反馈站点。
http://blog.csdn.net/Knight94/archive/2006/08/05/1023352.aspx