C#温故而知新学习系列之面向对象编程—析构函数(十六)
2012-02-04 14:51
459 查看
析构函数
析构函数是在类的破坏时自动执行的操作,析构函数在碎片收集时会自动调用,程序员无法控制何时调用析构函数,因为这是由垃圾回收器决定的
垃圾回收器
与运行时不进行垃圾回收的开发语言相比,C#无需太多的内存管理,这是因为.NETFramework垃圾回收器会隐式的管理对象的分配和释放,垃圾回收器检查是否存在应用程序不在使用的对象,如果垃圾回收器认为某个对象符合析构,则调用析构函数,并回收此对象占用的内存,应用程序退出时也会调用析构函数
为什么使用析构函数?
一般情况下,C#应用程序中很少使用析构函数,但是当应用程序封装窗口,文件和网络连接这些非托管资源时,应该使用析构函数释放这些资源,因为垃圾回收器不是所有的资源都能释放的
创建析构函数需要注意以下几点
1:析构函数只能定义在类中,不能定义在结构中
2:一个类只能有一个析构函数
3:无法重载析构函数
4:无法调用析构函数,它们被自动调用
5:析构函数没有修饰符,也没有参数
6:析构函数与类同名
举例
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace _14_Destructor
{
class Program
{
static void Main(string[] args)
{
}
}
class Student
{
~Student()
{
}
}
}
析构函数是在类的破坏时自动执行的操作,析构函数在碎片收集时会自动调用,程序员无法控制何时调用析构函数,因为这是由垃圾回收器决定的
垃圾回收器
与运行时不进行垃圾回收的开发语言相比,C#无需太多的内存管理,这是因为.NETFramework垃圾回收器会隐式的管理对象的分配和释放,垃圾回收器检查是否存在应用程序不在使用的对象,如果垃圾回收器认为某个对象符合析构,则调用析构函数,并回收此对象占用的内存,应用程序退出时也会调用析构函数
为什么使用析构函数?
一般情况下,C#应用程序中很少使用析构函数,但是当应用程序封装窗口,文件和网络连接这些非托管资源时,应该使用析构函数释放这些资源,因为垃圾回收器不是所有的资源都能释放的
创建析构函数需要注意以下几点
1:析构函数只能定义在类中,不能定义在结构中
2:一个类只能有一个析构函数
3:无法重载析构函数
4:无法调用析构函数,它们被自动调用
5:析构函数没有修饰符,也没有参数
6:析构函数与类同名
举例
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace _14_Destructor
{
class Program
{
static void Main(string[] args)
{
}
}
class Student
{
~Student()
{
}
}
}
相关文章推荐
- C#温故而知新学习系列之面向对象编程—16-析构函数
- C#温故而知新学习系列之面向对象编程—3-类的数据成员
- C#温故而知新学习系列之面向对象编程—自动属性(十一)
- C#温故而知新学习系列之面向对象编程—接口和抽象类的区别是什么?(十八)
- C#温故而知新学习系列之面向对象编程—4-方法
- C#温故而知新学习系列之面向对象编程—5-ref参数
- C#温故而知新学习系列之面向对象编程—6-out参数
- C#温故而知新学习系列之面向对象编程—对象初始化器(十五)
- C#温故而知新学习系列之面向对象编程—定义类与创建类的对象(一)
- C#温故而知新学习系列之面向对象编程—8-方法的重载
- C#温故而知新学习系列之面向对象编程—属性(十二)
- C#温故而知新学习系列之面向对象编程—接口和抽象类的区别是什么?(十八)
- C#温故而知新学习系列之面向对象编程—1-定义类与创建类的对象
- C#温故而知新学习系列之面向对象编程—方法(四)
- C#温故而知新学习系列之面向对象编程—定义结构(二)
- C#温故而知新学习系列之面向对象编程—2-定义结构
- C#温故而知新学习系列之面向对象编程—10-扩展方法
- C#温故而知新学习系列之面向对象编程—构造函数(七)
- C#温故而知新学习系列之面向对象编程—readonly关键字(十七)
- C#温故而知新学习系列之面向对象编程—ref参数(五)