C#面试常考随笔8:using关键字有哪些用法?

1. using 指令:引入命名空间

最常用的用法。通过using + 命名空间名字,可以在程序中直接使用该命名空间中的类型,而无需指定类型的完整命名空间路径。例如:

cs 复制代码
using System;
using System.Collections.Generic;
class Program
{
    static void Main()
    {
        List<int> numbers = new List<int>(); // 直接使用System.Collections.Generic中的List类型
        numbers.Add(1);
        Console.WriteLine(numbers[0]); // 直接使用System中的Console类型
    }
}

2. using static 指令:引入静态成员

通过using static + 类型,可以指定无需指定类型名称即可访问其静态成员的类型。使用该指令后,在代码中可以直接使用该类型的静态成员,而不必通过类型名来调用。例如:

cs 复制代码
using static System.Math;
class Program
{
    static void Main()
    {
        double result = Sqrt(16); // 直接使用System.Math的静态方法Sqrt
        Console.WriteLine(result);
    }
}

3. using 别名:为类型创建别名

当同一个 C# 文件引用了两个不同的命名空间,且这两个命名空间中都包含一个相同名字的类型时,为了避免混淆,可以使用using + 别名 = 包括详细命名空间信息的具体类型的方式为类型创建别名。例如:

cs 复制代码
using aClass = NameSpace1.MyClass;
using bClass = NameSpace2.MyClass;
namespace NameSpace1
{
    public class MyClass
    {
        public override string ToString()
        {
            return "You are in NameSpace1.MyClass";
        }
    }
}
namespace NameSpace2
{
    class MyClass
    {
        public override string ToString()
        {
            return "You are in NameSpace2.MyClass";
        }
    }
}
namespace testUsing
{
    class Class1
    {
        static void Main()
        {
            aClass my1 = new aClass();
            Console.WriteLine(my1);
            bClass my2 = new bClass();
            Console.WriteLine(my2);
        }
    }
}

4. using 语句:自动释放资源

using语句用于定义一个范围,在范围结束时自动调用对象的Dispose方法来释放资源。通常用于处理实现了IDisposable接口的对象,比如文件流、数据库连接等。语法形式为:

cs 复制代码
using (var resource = new ResourceType())
{
    // 使用resource对象的代码
}
// 离开这个代码块后,resource的Dispose方法会被自动调用,释放相关资源

例如,使用文件流读取文件内容时:

cs 复制代码
using (System.IO.StreamReader reader = new System.IO.StreamReader("test.txt"))
{
    string line;
    while ((line = reader.ReadLine()) != null)
    {
        Console.WriteLine(line);
    }
}
// 读取完毕后,StreamReader对象的Dispose方法会自动被调用,释放文件资源

这样可以确保即使在代码块中发生异常,相关资源也能被及时释放,避免资源泄漏。

扩展:

如何使用C#的using语句释放资源?什么是IDisposable接口?与垃圾回收有什么关系?-CSDN博客

什么情况下,C#需要手动进行资源分配和释放?什么又是非托管资源?-CSDN博客

相关推荐
IvanCodes15 分钟前
Python 数据处理(十三):JSON、CSV 与数据序列化
开发语言·python
aramae2 小时前
MySQL复合查询(8)
java·c语言·开发语言·后端·算法
Rain的Java大神之路2 小时前
如何快速上传10G文件
java·spring boot·redis·后端·mysql·spring cloud·面试
小贺儿开发3 小时前
Unity 家居视频遥控(细节优化)
科技·unity·程序员·udp·视频·工具·通信
淡海水3 小时前
13-04-面试-源码级深度追问链
数据结构·unity·面试·c#·游戏引擎·源码·il2cpp
asdzx674 小时前
如何使用 C# 提取 PPT 文本与图片
c#·ppt·提取文本
qq_2518364574 小时前
springboot vue3 开发实现 拼豆管理系统
java·开发语言·ai编程
郑州光合科技余经理5 小时前
同城外卖小程序开发:下单成功后,后台导出能不能对上用户端状态
开发语言·前端·git·后端·uni-app·php·ai编程
知识分享小能手5 小时前
C++ 学习教程,从入门到精通,C++ 入门知识 — 完整知识点(1)
开发语言·c++·学习
+VX:Fegn08956 小时前
计算机毕业设计|基于springboot + vue旅游管理系统(源码+数据库+文档)
java·开发语言·vue.js·spring boot·课程设计