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

一 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. Scala之Calendar,SimpleDateFormat简单用法

    package com.dingxin.entrance import java.text.SimpleDateFormat import java.util.{Calendar, Date} /** ...

  2. c/c++ const this指针

    const this指针 方法列表后面的const是什么含义呢?答案:不可以在方法里修改成员变量 class Test{ public: void fun()const{ //data = 10;// ...

  3. Tell Me About Yourself - Best Answers and Examples

    http://a4academics.com/interview-questions/73-human-resource/723-tell-me-about-yourself?showall=& ...

  4. Java高级教程

    目录 1.Java面向对象方法 1.1. 创建类和对象的方法 1.2. this的使用 1.3. 静态域和静态方法 1.3.1. 静态域:属于类的级别 1.3.2.静态常量 1.3.3 静态方法 1. ...

  5. TCP Health Checks

    This chapter describes how to configure health checks for TCP. Introduction NGINX and NGINX Plus can ...

  6. Linux /var/log下的各种日志文件详解

    1)/var/log/secure:记录登录系统存取数据的文件;例如:pop3,ssh,telnet,ftp等都会记录在此. 2)/var/log/wtmp:记录登录这的信息记录,被编码过,所以必须以 ...

  7. 5255 -- 【FJOI2016】神秘数

    5255 -- [FJOI2016]神秘数 Description 一个可重复数字集合\(S\) 的神秘数定义为最小的不能被 \(S\) 的子集的和表示的正整数.例如: \(S = {1,1,1,4, ...

  8. [CQOI2017]老C的键盘

    [CQOI2017]老C的键盘 题目描述 额,网上题解好像都是用的一大堆组合数,然而我懒得推公式. 设\(f[i][j]\)表示以\(i\)为根,且\(i\)的权值为\(j\)的方案数. 转移: \[ ...

  9. Alex网络

    alexNet共有八层网络卷积层1:输入224*224*3 卷积核11*11*3*96 步长为4 然后是ReLU.局部归一化.3*3步长为2的最大值池化卷积层2:输入为28*28*96 卷积核5*5* ...

  10. 数据库事务的四大特性以及事务的隔离级别-与-Spring事务传播机制&隔离级别

    数据库事务的四大特性以及事务的隔离级别   本篇讲诉数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别. 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ ...