global using 的另类用法

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了global using 的另类用法相关的知识,希望对你有一定的参考价值。

前言

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

以上是关于global using 的另类用法的主要内容,如果未能解决你的问题,请参考以下文章

滴答清单子作务另类用法

Python装饰器的另类用法

js中&&和||的另类用法总结

ls另类用法

SU53权限检查的另类用法

search-mailbox命令的另类用法