前言
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 确实被替换了:
结论
这个另类用法可以用于,代码中已经使用了大量某个第三方类库,但是需要进行紧急替换的场景。

