前言
global using 指令在 C# 10 中被引入,意味着 using 将应用于编译中的所有文件(通常是一个项目)。
比如:
global using System.Text;则在同一项目的其他位置,可以直接使用 System.Text 下的所有类型而无需再次声明 using。
另外,可以创建using 别名指令,以便更易于将标识符限定为命名空间或类型。
比如:
using dt = System.DateTime;则可以直接使用 dt.Now 来代替 System.DateTime.Now 。
并且,上述 2 个指令可以结合在一起使用:
global using dt = System.DateTime;使用别名要小心,如果别名是一个已使用的名称,则容易造成错误:
global using DateTime = System.Text.Encoding;
但是,反过来想:
如果上面的 Encoding 包含了 Now 的定义,是不是就可以替换掉现有的 DateTime.Now 实现呢?
Demo
新建一个 .cs 文件,在顶部使用 global using 设置 DateTime 为别名:
global using DateTime = ConsoleApp1.MyIODateTime;在 MyIODateTime 中同样实现 Now 属性:
public static class MyIODateTime
{public static System.DateTime Now { get {Console.WriteLine("Call from MyIODateTime");return new System.DateTime(2022, 1, 1); } }
}在 ConsoleApp1 中执行 Console.WriteLine(DateTime.Now);,可以发现 DateTime.Now 确实被替换了:

结论
这个另类用法可以用于,代码中已经使用了大量某个第三方类库,但是需要进行紧急替换的场景。
如果你有关于global using更好的想法,欢迎到我的公众号"My IO"留言讨论