上篇提到析构函数,就顺便复习一下。

一 C# 析构函数

1.1 析构函数的定义

  • 析构函数用于释放被占用的系统资源。
  • 析构函数的名字由符号“~”加类名组成。

1.2 析构函数注意的问题

  • 使用析构函数时,应该注意下面的问题:
  • 只能在类中使用析构函数,不能在结构中使用析构函数。
  • 一个类只能有一个析构函数。
  • 不能继承或重载析构函数。
  • 析构函数只能被自动调用。
  • 析构函数没有任何修饰符、没有任何参数、也不返回任何值。

1.3 调用析构函数

  • 垃圾回收器决定了析构函数的调用,我们无法控制何时调用析构函数。
  • 垃圾回收器检查是否存在应用程序不再使用的对象。如果垃圾回收器认为某个对象符合析构,则调用析构函数(如果有)并回收用来存储此对象的内存。
  • 程序退出时会调用析构函数。
  • 我们可以通过调用Collect强制进行垃圾回收,但是请不要这样做,因为这样做可能导致性能问题。

二 构造函数与析构函数的区别

  • 构造函数和析构函数是在类中说明的两种特殊的成员函数。
  • 构造函数是在创建对象时,使用给定的值将对象初始化。
  • 析构函数用于释放一个对象。在对象删除前,使用析构函数做一些清理工作,它与构造函数的功能正好相反。

三 示例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; 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#析构函数-www.baike369.com
Third Third1 = new Third(); // 创建类的实例
}
}
}

程序运行时,这三个类的析构函数将自动被调用,调用顺序是按照从派生程度最大的(~Third())到派生程度最小的(~First())次序调用的,和构造函数的调用顺序正好相反。

运行结果:

~Third()析构函数
~Second()析构函数
~First()析构函数

【C#复习总结】析构函数的更多相关文章

  1. C++复习13.虚析构函数知识

    C++ 虚析构函数 20131010 在C++中的虚函数作用是实现基于继承机制的多态,但是我们好像忽略了一种情况,就是虚析构函数.在C++继承机制中,虽然构造函数是不可以使用虚函数声明,但是析构函数是 ...

  2. C++复习10.对象的初始化拷贝析构函数

    对象的初始化.拷贝构造和析构函数 20131002 构造函数.析构函数.赋值函数是类的基本函数.每一个类只有一个析构函数,但是可以有多个构造函数.多个赋值函数.一般如果类中没有显示的声明和定义上述函数 ...

  3. PHP面向对象之魔术方法复习

    魔术方法复习 2014-9-2 10:08:00 NotePad++ By jiancaigege 飞鸿影~========================= 1.__construct() 构造方法 ...

  4. C#复习⑥

    C#复习⑥ 2016年6月19日 23:46 Main Interfaces & Delegates 接口和委托 1.接口基本语法 public interface IList : IColl ...

  5. C#复习④

    C#复习④ 2016年6月16日 12:37 Main Classes and Structs 类和结构体 1.Contents of Classes 字段,常量,方法,构造函数,析构函数: 特性,事 ...

  6. C#复习③

    C#复习③ 2016年6月16日 11:13 Main Declaration & Statement 声明和语句 1.一个程序包含的声明空间有哪些? Namespace : declarat ...

  7. C#复习②

    C#复习② 2016年6月15日 09:08 1.C#之Symbols Identifier = (letter|'_'|'@'){letter|digit|'_'}. 需要注意: 1.Unicode ...

  8. C++复习笔记

    好多东西都忘了,现在重新复习一遍,把遇到的要点都记录下来.随时更新. 指针 C保证在为数组分配存储空间的时候,指向数组之后的第一个位置的指针也是合法的.也就是说保证指针 a + SIZE 是合法的,但 ...

  9. 《C++Primer》复习——with C++11 [1]

    1.头文件中不应包含using声明,因为头文件的内容会拷贝到所有引用到他的文件中去,如果头文件里有谋个using声明,那么每个使用了该头文件的文件就会有这个声明,由于不经意间包含了一些名字,反而可能产 ...

随机推荐

  1. (转载)彻底的理解:WebService到底是什么?

    最近老是有人跟我提web service接口,怎么,怎么滴,我觉得很扎耳朵,web service是一种将服务器的服务封装起来的技术,表现为对外提供接口,所以,web service不是一种接口 !! ...

  2. Django 系统日志logging

    Django使用Python内建的logging模块去建造自己的系统日志的,如果你想详细了解这个模块的话,请自己去看python的说明文档,这里仅仅介绍Django中的日志系统. 日志配置包括四个部分 ...

  3. 如何让python嵌入html实现类似php的快速开发,十分有价值

    1.在一个文件夹名为www.html3.com的web项目来实现,首先到nginx的配置文件nginx.conf做如下配置 python和html混合编写的文件,我以文件后缀为.phtml,通过服务器 ...

  4. 如何设置访问内网web项目

    1.若我的项目搭建在一个linux虚拟机上 2.在内网的一台电脑做以下配置 3.测试访问 ******************************************************* ...

  5. IDLE提供的常用快捷键

    IDLE提供的常用快捷键 快捷键 说明 适用于 F1 打开Python帮助文档 Python文件窗口和shell窗口均可用 Alt+P 浏览历史命令(上一条) 仅Python Shell窗口可用 Al ...

  6. 计数排序与桶排序python实现

    计数排序与桶排序python实现 计数排序 计数排序原理: 找到给定序列的最小值与最大值 创建一个长度为最大值-最小值+1的数组,初始化都为0 然后遍历原序列,并为数组中索引为当前值-最小值的值+1 ...

  7. python3+正则表达式爬取 猫眼电影

    '''Request+正则表达式抓取猫眼电影TOP100内容''' import requests from requests.exceptions import RequestException i ...

  8. Google开源GSON的使用

    * 谷歌开原项目GitHub地址:https://github.com/google/gson 1.新建一个maven项目,引入gson的dependency坐标依赖以及commons-io的坐标: ...

  9. Servlet(一):Hello Servlet

    今天介绍的专题是servlet和jsp,属于web开发中的基础,先来实际操作一下servlet,创建你的第一个web小项目. 1.新建一个maven项目. 鼠标右键单击eclipse左边项目栏的空白区 ...

  10. Linux 小知识翻译 - 「LDAP」

    这次聊聊「LDAP」. LDAP是「Lightweight Directory Access Protocol」的所有,从名字上可以看出是协议的一种. LDAP是访问数据库(层次型数据库)的组件.管理 ...