zoukankan      html  css  js  c++  java
  • 说说 C# 8 using 新特性

    在 .NET 运行时 GC 会负责清理内存,但是我们有时候需要手动清理资源(比如非托管资源不再使用的时候),在以前对于实现了 IDisposable 接口的对象,我们会使用 using 语句来清理掉。例如如下代码:

    class Program
    {
        static void Main(string[] args)
        {
            using(var demo=new Demo())
            {
                demo.Write();
            }
            Console.WriteLine("释放完毕!");
        }
    
    }
    public class Demo : IDisposable
    {
        public void Dispose()
        {
            Console.WriteLine("我被using释放了");
        }
        public void Write()
        {
            Console.WriteLine("我被调用了!");
        }
       // more code
       //...........
       //...........
       //...........
    }
    

    上述代码运行后会首先输出 “我被调用了”,之后会输出 “我被using释放了”,最后输出 “释放完毕”。从8.0开始我们可以使用 using 声明 来代替 using() ,这样代码会更简单明了。我们将前面代码里的 Main 方法修改如下:

    static void Main(string[] args)
    {
        using var demo = new Demo();
        demo.Write();
        Console.WriteLine("释放完毕!");
    }
    

    执行修改后的代码,首先输出 我被调用了,之后会输出 释放完毕,最后输出 我被using释放了。从输出我们可以看出,Dispose() 最后才会被调用,那么为什么会是这样呢?其实很简单,是因为清理动作会发生在超出要清理的资源的作用域范围的时候,也就是离开 Main 方法时。

  • 相关阅读:
    Runloop运行循环的理解
    GCD dispatch_apply基本使用
    GCD信号量semaphore控制线程并发数
    多线程GCD dispatch_once_t/dispatch_barrier_<a>sync/dispatch_group_t
    iOS开发常用宏定义
    OC方法可变参数
    GCD的基本使用
    iOS实用小工具
    项目中实用第三方框架
    NSTimer内存泄漏问题
  • 原文地址:https://www.cnblogs.com/gangzhucoll/p/12778156.html
Copyright © 2011-2022 走看看