前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >说说 C# 8 using 新特性

说说 C# 8 using 新特性

作者头像
喵叔
发布2020-09-08 16:35:13
4370
发布2020-09-08 16:35:13
举报
文章被收录于专栏:喵叔's 专栏喵叔's 专栏

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

代码语言:javascript
复制
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 方法修改如下:

代码语言:javascript
复制
static void Main(string[] args)
{
    using var demo = new Demo();
    demo.Write();
    Console.WriteLine("释放完毕!");
}

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-11-01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档