说说 C# 8 using 新特性

简介: 说说 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 方法时。

目录
相关文章
|
3月前
|
C#
C#学习相关系列之数据类型类的三大特性(二)
C#学习相关系列之数据类型类的三大特性(二)
|
3月前
|
编译器 C# 开发者
C# 11.0中的新特性:覆盖默认接口方法
C# 11.0进一步增强了接口的灵活性,引入了覆盖默认接口方法的能力。这一新特性允许类在实现接口时,不仅可以提供接口中未实现的方法的具体实现,还可以覆盖接口中定义的默认方法实现。本文将详细介绍C# 11.0中接口默认方法覆盖的工作原理、使用场景及其对现有代码的影响,帮助开发者更好地理解和应用这一新功能。
|
3月前
|
编译器 C# 开发者
C# 9.0中的顶级语句:简化程序入口的新特性
【1月更文挑战第13天】本文介绍了C# 9.0中引入的顶级语句(Top-level statements)特性,该特性允许开发者在不使用传统的类和方法结构的情况下编写简洁的程序入口代码。文章详细阐述了顶级语句的语法、使用场景以及与传统程序结构的区别,并通过示例代码展示了其在实际应用中的便捷性。
|
4天前
|
开发框架 .NET 编译器
总结一下 C# 如何自定义特性 Attribute 并进行应用
总结一下 C# 如何自定义特性 Attribute 并进行应用
|
API C#
C#反射与特性(三):反射类型的成员
C#反射与特性(三):反射类型的成员
265 0
|
3月前
|
开发框架 .NET Java
ASP.NET Core高级编程--C#基本特性(一)
本文章简略介绍C#的部分特性
|
9月前
|
C#
c#之Attribute特性的原理
c#之Attribute特性的原理
39 0
|
数据可视化 程序员 C#
C# 面向对象三大特性
C# 面向对象三大特性
89 0
|
缓存 IDE API
C#反射与特性(五):主类型成员操作
C#反射与特性(五):主类型成员操作
364 0
C#反射与特性(五):主类型成员操作
|
C# 索引
【全栈计划 —— 编程语言之C#】总结深入面向对象三大特性之二 —— 继承性
【全栈计划 —— 编程语言之C#】总结深入面向对象三大特性之二 —— 继承性
92 0
【全栈计划 —— 编程语言之C#】总结深入面向对象三大特性之二 —— 继承性