全局 using 是 C# 10.0 引入的项目级命名空间声明机制,用于简化重复 using、提升可读性;适合高频基础命名空间(如 System)、项目通用命名空间(如 MyApp.Core)及常用第三方入口(如 Microsoft.Extensions.DependencyInjection),不建议引入低频窄语义命名空间;需置于 .cs 文件顶部、命名空间外,支持 static 导入,与普通 using 共存且后者优先级更高。

全局 using 指令是 C# 10.0 引入的语法特性,用于在项目级别一次性声明常用命名空间,避免在每个源文件顶部重复写 using 语句。它不改变程序逻辑,只简化代码组织,提升可读性和维护性。
哪些命名空间适合用 global using?
适合全局引入的通常是项目中高频使用、几乎每个文件都依赖的基础命名空间,例如:
-
System、System.Collections.Generic、System.Linq - 项目自定义的通用工具命名空间,如
MyApp.Core、MyApp.Extensions - 第三方库的常用入口,比如
Microsoft.Extensions.DependencyInjection(在 ASP.NET Core 项目中)
不建议全局引入语义较窄或仅少数文件用到的命名空间,否则会降低代码可读性——读者无法直观判断某个类型来自哪个命名空间。
如何声明 global using?
全局 using 必须写在 .cs 文件的最顶部,且不能出现在命名空间声明内部。常见位置是专门新建的 GlobalUsings.cs 文件(文件名任意,但推荐统一管理):
global using System; global using System.IO; global using System.Linq; global using MyApp.Models; global using static System.Console;
注意:
- global using static 也支持静态导入(如上面的 Console);
- 同一项目中多个 global using 声明会自动合并,无顺序要求;
- 它对整个编译单元(即当前项目所有 C# 文件)生效,但不会影响引用的其他项目。
与传统 using 的共存和优先级
全局 using 和文件内普通 using 可以同时存在,编译器按如下规则处理:
- 文件内
using优先级更高,可覆盖全局引入(比如全局写了global using System.Text;,某文件又写了using System.Text.Json;,两者不冲突) - 若出现命名冲突(例如两个全局 using 引入了同名类型),编译器报错,需显式用全限定名或在文件内用普通 using 消除歧义
- 全局 using 不影响 XML 文档注释中的命名空间解析,也不改变 IDE 的智能提示行为
基本上就这些。合理使用 global using 能让代码更清爽,但别为了省几行而牺牲可维护性。


















