有几种不同的操作方式

方式一:


namespace ConsoleApp1
{
    class Test
    {
        ~Test()// 析构函数
        {
            Console.WriteLine("~Test()析构函数");
        }
    }     class Program
    {
       
        static void Main(string[] args)
        {
            Test f = new Test();
            f = null;
            GC.Collect();
            Console.WriteLine("读取按键中");
            Console.Read();
            Console.WriteLine("读取到按键");
            Console.WriteLine("程序结束");         }
    }
}
 

方式二:

    class Test
{
~Test()// 析构函数
{
Console.WriteLine("~Test()析构函数");
}
} class Program
{ static void Main(string[] args)
{
Test f = new Test();
//f = null;
GC.Collect();
Console.WriteLine("读取按键中");
Console.Read();
Console.WriteLine("读取到按键");
Console.WriteLine("程序结束"); }
}

方式三:

class Test:IDisposable
{
    ~Test()// 析构函数
    {
        Console.WriteLine("~Test()析构函数");
    }     public void Dispose()
    {
        Console.WriteLine("Dispose()");
        GC.SuppressFinalize(this);
        //throw new NotImplementedException();
    }
} class Program
{
   
    static void Main(string[] args)
    {
        using (Test f = new Test())
        {
            
        }
        GC.Collect();
        Console.WriteLine("读取按键中");
        Console.Read();
        Console.WriteLine("读取到按键");
        Console.WriteLine("程序结束");     }
}

方式四:

    class Test:IDisposable
{
~Test()// 析构函数
{
Console.WriteLine("~Test()析构函数");
} public void Dispose()
{
Console.WriteLine("Dispose()");//throw new NotImplementedException();
}
} class Program
{ static void Main(string[] args)
{
using (Test f = new Test())
{ }
GC.Collect();
Console.WriteLine("读取按键中");
Console.Read();
Console.WriteLine("读取到按键");
Console.WriteLine("程序结束"); }
}

其它:直接按控制台关闭按钮,是不会调用析构函数的。
注:SuppressFinalize是取消执行终结器(析构函数)的意思。

C#析构函数与Dispose的更多相关文章

  1. 析构函数和Dispose的使用区别

    老生常谈的问题了,MSDN也有非常详细的说明但看起来不是很系统.也曾经做过分析,但没有总结下来又忘了,这次整理一下MSDN和网上搜集的一些资料,以备不时只需. 下面是MSDN对这两个函数的建议使用方法 ...

  2. 析构函数和Dispose方法的区别

    1. 析构函数(Finalize)只能释放非托管资源, 它是由GC调用. 2. Dispose方法可以释放托管资源和非托管资源,它是由用户手动调用的. 在Dispose()中调用 GC.Suppres ...

  3. .net 的析构函数和dispose模式

  4. 内存回收,Dispose,Close,Finalie(C#中的析构函数)

    NET中的资源分托管和非托管,所谓的托管是指CLR(通用语言运行时)中进行管理的资源,它可以由CLR自动进行内存回收. 也就是大家熟知的GC(垃圾回收机制). 而对于 非托管资源,比如数据库连接,CO ...

  5. C#中Dispose、析构函数、close的区别

    一.Close与Dispose这两种方法的区别 调用完了对象的Close方法后,此对象有可能被重新进行使用:而Dispose方法来说,此对象所占有的资源需要被标记为无用了,也就是此对象要被销毁,不能再 ...

  6. C#中Dispose,finalize,GC,析构函数区别

    释放类所使用的未托管资源的两种方式:  1.利用运行库强制执行的析构函数,但析构函数的执行是不确定的,而且,由于垃圾收集器的工作方式,它会给运行库增加不可接受的系统开销. 2.IDisposable接 ...

  7. SafeHandle和Dispose z

    SafeHandle最大的意义是封装一个托管资源且本身会执行.NET中的资源释放模式(所谓的Dispose Pattern),这样,开发者在使用非托管资源时,不可以不需要执行繁琐的资源释放模式,而直接 ...

  8. C# Dispose模式详细分析

    C#Dispose模式 目的: 为了及时释放宝贵的非托管资源和托管资源,并且保证资源在被gc回收的时候可以正确释放资源,同时兼顾执行效率 必须遵循的事实: 1 托管资源释放: 由另一线程的gc进行释放 ...

  9. Dispose in c#

    在标准的Dispose模式中,真正的IDisposable接口的Dispose方法并没有做实际的清理工作,它其实是调用了下面的这个带bool参数且受保护的的虚方法: protected virtual ...

随机推荐

  1. Fuck me 忘记改REDO 造成复制用户超级慢

    . 一个用户的测试环境, 想着复制用户进行功能和单点性能测试. 但是用户数据量较大,见图 2. 发现在测试环境里面复制一个用户 大概耗时2小时20min的时间, 测试虚拟机的配置: 最开始注意到awr ...

  2. css 按钮凹陷的感觉

    .login-btn{ margin-top: 60rpx !important; background-color:transparent !important; width: 40%; margi ...

  3. centos 7 修改系统屏幕分辨率

    centos 7 修改系统屏幕分辨率,命令方式和图形方式的修改方法. 命令:xrandr 通过命令 xrandr 修改系统的分辨率,输入xrandr: bash [admin@localhost ~] ...

  4. NAT模式下VMware中CentOS7无法连接外网的解决方法

    故障现象 ----------------------------------------------------------------------------------------------- ...

  5. python列表和元组操作

    列表 列表(list)是python以及其他语言中最常用到的数据结构之一.Python使用中括号[ ]来解析列表.列表是可变的(mutable)—可以改变列表的内容. 定义列表 names = ['m ...

  6. BZOJ3653谈笑风生——可持久化线段树+dfs序

    题目描述 设T 为一棵有根树,我们做如下的定义: ? 设a和b为T 中的两个不同节点.如果a是b的祖先,那么称“a比b不知道 高明到哪里去了”. ? 设a 和 b 为 T 中的两个不同节点.如果 a ...

  7. 洛谷 P3155 [CQOI2009]叶子的染色 解题报告

    P3155 [CQOI2009]叶子的染色 题目描述 给一棵m个结点的无根树,你可以选择一个度数大于1的结点作为根,然后给一些结点(根.内部结点和叶子均可)着以黑色或白色.你的着色方案应该保证根结点到 ...

  8. Python文件和异常

    程序和运行时数据是在内存中驻留的,涉及到数据交换的地方,通常是磁盘.网络等,因此需要IO接口. IO编程中,Stream(流)是一个很重要的概念,可以把流想象成一个水管,数据就是水管里的水,但是只能单 ...

  9. Android手势监听类GestureDetector的使用

    在使用自定义视图的时候,对触屏事件的处理是比不可少的,有能力的可以自己写代码处理,这样更加的灵活.如果不想这么麻烦,Android提供了一个手势监听类GestureDetector,可以供我们使用.G ...

  10. 循环viewpager

    如果viewpager listadapter小于三个.用这个移除异常. for (View view : viewList) {             ViewGroup p = (ViewGro ...