前言
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"留言讨论