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博客

相关推荐
励志不掉头发的内向程序员2 分钟前
C++进阶——多态
开发语言·c++·学习
007php00725 分钟前
某大厂MySQL面试之SQL注入触点发现与SQLMap测试
数据库·python·sql·mysql·面试·职场和发展·golang
雨中散步撒哈拉1 小时前
13、做中学 | 初一下期 Golang数组与切片
开发语言·后端·golang
0wioiw01 小时前
Go基础(③Cobra)
开发语言·后端·golang
楼田莉子1 小时前
C++算法专题学习:栈相关的算法
开发语言·c++·算法·leetcode
晨非辰1 小时前
#C语言——刷题攻略:牛客编程入门训练(九):攻克 分支控制(三)、循环控制(一),轻松拿捏!
c语言·开发语言·经验分享·学习方法·visual studio
_oP_i1 小时前
Java 服务接口中解决跨域(CORS,Cross-Origin Resource Sharing)问题
java·开发语言
陈序猿(代码自用版)1 小时前
【考研C语言编程题】数组元素批量插入实现(含图示+三部曲拆解)
c语言·开发语言·考研
唐•苏凯1 小时前
ArcGIS Pro 遇到严重的应用程序错误而无法启动
开发语言·javascript·ecmascript
kymjs张涛2 小时前
零一开源|前沿技术周刊 #15
前端·javascript·面试