在写C#代码的时候,using这个词几乎天天见。很多人一开始只知道它用来引入命名空间,比如 using System;,但其实它还有不少实用的用法,特别是在资源管理和代码整洁性上,能帮我们省去不少麻烦。
引入命名空间
最常见的用法就是在文件开头写 using,把需要的命名空间引进来,这样就不用每次写全称。比如:
using System;
using System.IO;
class Program
{
static void Main()
{
Console.WriteLine("Hello"); // 不用写 System.Console
}
}
这就像你住在小区里,不用每次都报街道门牌号,直接说“我是3栋的”就行。
简化资源释放:using语句块
有些对象用了就得赶紧关,比如文件、数据库连接、网络流。忘了关就会占资源,时间一长程序就卡。这时候 using 就能自动帮你收尾。
比如读个配置文件:
using (FileStream fs = new FileStream("config.txt", FileMode.Open))
{
using (StreamReader reader = new StreamReader(fs))
{
string content = reader.ReadToEnd();
Console.WriteLine(content);
}
} // reader 和 fs 会自动调用 Dispose() 关闭
只要对象实现了 IDisposable 接口,就能扔进 using 块里,出了大括号自动清理,比写 try...finally 省事多了。
using别名指令
当两个类名字一样但来自不同命名空间时,可以用 using 给它们起个别名,避免冲突。
比如你同时引用了两个库,都有一个叫 Logger 的类:
using MyLogger = MyCompany.Logging.Logger;
using ThirdPartyLogger = ThirdParty.Tools.Logger;
class Program
{
static void Main()
{
MyLogger logger1 = new MyLogger();
ThirdPartyLogger logger2 = new ThirdPartyLogger();
}
}
这就像是你有两个朋友都叫“小李”,一个叫“财务小李”,一个叫“IT小李”,叫的时候分得清。
全局using(C# 10+)
如果你觉得每个文件都写一堆 using 很烦,从 C# 10 开始支持全局引入。只需要在一个文件里写:
global using System;
global using System.Collections.Generic;
global using MyProject.Utilities;
这样一来,整个项目都不用重复写了,适合那些几乎所有文件都要用的基础命名空间。
不过也别滥用,不然别人看不懂你代码里用的类型是从哪来的。