C#析构函数 (转载)
一、C#析构函数
1. 析构函数的定义与注意的问题
析构函数用于释放被占用的系统资源。
析构函数的名字由符号“~”加类名组成。
使用析构函数时,应该注意下面的问题:
- 只能在类中使用析构函数,不能在结构中使用析构函数。
- 一个类只能有一个析构函数。
- 不能继承或重载析构函数。
- 析构函数只能被自动调用。
- 析构函数没有任何修饰符、没有任何参数、也不返回任何值。
2. 调用析构函数
垃圾回收器决定了析构函数的调用,我们无法控制何时调用析构函数。
垃圾回收器检查是否存在应用程序不再使用的对象。如果垃圾回收器认为某个对象符合析构,则调用析构函数(如果有)并回收用来存储此对象的内存。
程序退出时会调用析构函数。
我们可以通过调用Collect强制进行垃圾回收,但是请不要这样做,因为这样做可能导致性能问题。
二、构造函数与析构函数的区别
构造函数和析构函数是在类中说明的两种特殊的成员函数。
构造函数是在创建对象时,使用给定的值将对象初始化。
析构函数用于释放一个对象。在对象删除前,使用析构函数做一些清理工作,它与构造函数的功能正好相反。
三、示例
using System; namespace Test
{
class Program
{
class First // 基类First
{
~First() // 析构函数
{
Console.WriteLine("~First()析构函数");
}
}
class Second : First // Second类从First类派生
{
~Second() // 析构函数
{
Console.WriteLine("~Second()析构函数");
}
}
class Third : Second // Third类从Second类派生
{
~Third() // 析构函数
{
Console.WriteLine("~Third()析构函数");
}
}
static void Main(string[] args)
{
// C#析构函数
Third Third1 = new Third(); // 创建类的实例
}
}
}
程序运行时,这三个类的析构函数将自动被调用,调用顺序是按照从派生程度最大的(~Third())到派生程度最小的(~First())次序调用的,和构造函数的调用顺序正好相反。
运行结果:
 
~Third()析构函数
~Second()析构函数
~First()析构函数
C#析构函数 (转载)的更多相关文章
- C++中避免内存泄露常见的解决方式
		常见内存泄露及解决方式-选自ood启发录 new/delete, array new/arrray delete匹配 case 1: 在类的构造函数与析构函数中没有匹配地调用 new/delete! ... 
- C++析构函数定义为虚函数(转载)
		转载:http://blog.csdn.net/alane1986/article/details/6902233 析构函数执行时先调用派生类的析构函数,其次才调用基类的析构函数.如果析构函数不是虚函 ... 
- (转载)C++中将构造函数或析构函数定义为private
		(转载)http://www.blogjava.net/fhtdy2004/archive/2009/05/30/278971.html C++中将构造函数或析构函数定义为private 很多情况下要 ... 
- (转载)C++中, 构造函数和析构函数能不能被显示调用?
		(转载)http://blog.csdn.net/zhangxinrun/article/details/6056321 代码: view plaincopy to clipboardprint?#i ... 
- C++中虚析构函数的作用 (转载)
		转自:http://blog.csdn.net/starlee/article/details/619827 我们知道,用C++开发的时候,用来做基类的类的析构函数一般都是虚函数.可是,为什么要这样做 ... 
- 多态时最好将基类的析构函数设为virtual、 C++中两个类相互包含引用问题 (转载)
		多态:http://blog.csdn.net/tmljs1988/article/details/8146521 C++中两个类相互包含引用问题:http://blog.csdn.net/leo11 ... 
- glibc与MSVC CRT(转载)
		glibc与MSVC CRT 运行库是平台相关的,因为它与操作系统结合得非常紧密.C语言的运行库从某种程度上来讲是C语言的程序和不同操作系统平台之间的抽象层,它将不同的操作系统API抽象成相同的库函数 ... 
- class中new与未new的区别    类对象占用空间--转载
		转载自http://blog.sina.com.cn/shuiwuhendeboke 颗颗的博客 (1)作用域不同 不用new:作用域限制在定义类对象的方法中,当方法结束时,类对象也被系统释放了 ... 
- C/C++程序员应聘试题剖析(转载)
		转载自:http://www.cnitblog.com/zouzheng/articles/21856.html 1.引言 本文的写作目的并不在于提供C/C++程序员求职面试指导,而旨在从技术上分析面 ... 
随机推荐
- 前端周报:前端面试题及答案总结;JavaScript参数传递的深入理解
			1.2017前端面试题及答案总结 |掘金技术征文 "金三银四,金九银十",用来形容求职最好的几个月.但是随着行业的饱和,初中级前端er就业形势不容乐观. 行业状态不可控,我们能做的 ... 
- stylus解决移动端1像素边框的问题
			首先 我是借用了yo框架的border和他的媒体查询组合 这两个分别是在yo>lib>core>classes>_border.scss(用来获取yo框架封装的border) ... 
- python小练习:用户三次登陆, 购物车
			2018.12.1 周末练习: 1.用户三次登陆 from random import randint i = 1 while i < 4: num = 0 verify_code = '' w ... 
- 将Windows下的InfluxDB、Grafana做成Windows服务
			从网上下载的Windows下的InfluxDB.Grafana,都是控制台程序,打开窗口后,很容易被别人给关掉,因此考虑做成Windows服务,nssm正是解决该问题的利器. 1.下载nssm htt ... 
- SoapUI 利用SoapUI进行简单的接口并发测试
			利用SoapUI进行简单的接口并发测试 by:授客 QQ:1033553122 测试环境: SoapUI Pro 5.1.2 步骤如下 1. 把请求添加到测试套件 1.1. 途径1 1.新 ... 
- NoHttp封装--02 自定义请求
			bean实体类请求: 1.bean import java.io.Serializable; import com.alibaba.fastjson.annotation.JSONField; pub ... 
- linux上用newman+postman进行自动化测试
			第一步:导出postman文件 Postman就是根据collection和enviroment这两个json文件来自动化运行的! 所以从Postman中导出collection和enviroment ... 
- pip安装django的时候提示没有这个命令
			问题描述: 在安装pyenv安装完python的时候,用pip安装django提示没有这个命令 [root@zabbix ~]# pip install django== 2.0 pyenv: pip ... 
- MySQL sql_mode=only_full_group_by错误
			今天在测试服务器上突然出现了这么一个MySQL的问题,同样的代码正式服没有问题,那肯定就是出在了配置上,查了一下原因才明白原来是数据库版本为5.7以上的版本, 默认是开启了 only_full_gro ... 
- leetcode 7. Reverse Integer [java]
			public int reverse(int x) { long res = 0; while (x != 0){ res = res* 10 + x % 10; x /= 10; } if(res ... 
