C#中对于using的使用方式

在C#中,using 关键字有两种主要用途:

  1. 作为指令(Directives)
    using 指令用于在文件的顶部包含(或导入)命名空间。这允许您在不使用完全限定的命名空间的情况下引用命名空间中的类型。

    示例:

    csharp 复制代码
    using System;
    using System.Collections.Generic;
    
    namespace MyNamespace
    {
        class Program
        {
            static void Main()
            {
                List<string> myList = new List<string>(); // 由于使用了using指令,可以省略System.Collections.Generic
                Console.WriteLine("Hello, World!"); // 由于使用了using指令,可以省略System
            }
        }
    }
  2. 作为语句(Statements)
    using 语句用于定义一个范围,在此范围内对象将被初始化,并在范围结束时自动调用该对象的 Dispose 方法(如果对象实现了 IDisposable 接口)。这通常用于确保资源(如文件句柄、数据库连接等)在使用完毕后被正确释放。

    示例:

    csharp 复制代码
    using (var fileStream = new System.IO.FileStream("example.txt", System.IO.FileMode.Open))
    {
        // 使用fileStream进行读写操作
        byte[] buffer = new byte[1024];
        int bytesRead = fileStream.Read(buffer, 0, buffer.Length);
        // ... 其他操作 ...
    
        // 当代码块结束时,fileStream.Dispose() 将被自动调用
    } // 这里fileStream.Dispose()被隐式调用

    注意,在 using 语句块内,你不能在外部访问由 using 语句初始化的对象,因为一旦 using 块结束,该对象就被销毁了。

另外,从C# 8.0开始,using 声明也可以用于局部变量,使得在方法体之外初始化对象并在方法体结束时自动调用其 Dispose 方法成为可能:

csharp 复制代码
public void MyMethod()
{
    using var fileStream = new System.IO.FileStream("example.txt", System.IO.FileMode.Open);
    // ... 使用fileStream ...
    // fileStream.Dispose() 将在方法结束时自动调用
}

这种语法是 using 语句的简化形式,它允许在方法体内部直接声明并初始化资源,而无需额外的代码块。

相关推荐
宝桥南山29 分钟前
GitHub Models - 尝试一下使用GitHub Models
microsoft·ai·微软·c#·github·.netcore
Ulyanov35 分钟前
《现代 Python 桌面应用架构实战:PySide6 + QML 从入门到工程化》 开发环境搭建与工具链极简主义 —— 拒绝臃肿,构建工业级基座
开发语言·python·qt·ui·架构·系统仿真
逻辑驱动的ken40 分钟前
Java高频面试场景题19
java·开发语言·面试·职场和发展·求职招聘
初心未改HD1 小时前
Go语言net/http与Web开发:构建高性能HTTP服务
开发语言·golang
叼烟扛炮1 小时前
C++第一讲:C++ 入门基础
开发语言·c++·函数重载·引用·内联函数·nullptr
Ulyanov1 小时前
《现代 Python 桌面应用架构实战:PySide6 + QML 从入门到工程化》:QML 声明式语法与霓虹按钮 —— 当 Python 遇见现代美学
开发语言·python·ui·qml·系统仿真·雷达电子对抗仿真
弹不出的5h3ll2 小时前
Ghost Bits:高位截断如何让 Java WAF 形同虚设
java·开发语言
码界筑梦坊2 小时前
113-基于Python的国际超市电商销售数据可视化分析系统
开发语言·python·信息可视化·毕业设计·fastapi
memories1982 小时前
Go 语言 Channel(管道/通道)
开发语言·后端·golang
初心未改HD2 小时前
Go语言结构体Struct:内存布局、标签、接收者与内存对齐
开发语言·golang