C#教程

关注公众号 jb51net

关闭
首页 > 软件编程 > C#教程 > C#12 Using Alias

C#12中Using Alias的使用小结

作者:叫我少年

详细介绍了C#中using别名的使用和新特性,特别强调了C#1中扩展了using别名的适用范围,包括支持元组类型、指针类型、开放泛型等,感兴趣的可以了解一下

一、什么是 Using Alias

Using Alias 是 C# 中 using 指令的一种形式,允许为类型或命名空间定义一个简短的别名。早在 C# 1.0 就存在,但一直有严格限制。

基本语法:

using AliasName = Fully.Qualified.TypeName;

旧版支持的类型(C# 1~11):

旧版不支持的类型:

这些限制导致开发者在处理复杂类型签名时不得不重复书写冗长的声明,降低了代码可读性。

二、C#12 的新变化

C#12 大幅扩展了 using alias​ 的适用范围,允许为任何类型创建别名,包括之前被排除在外的类型。

2.1 支持元组类型

using Point = (int X, int Y);

// 使用别名
Point p = (10, 20);
Console.WriteLine(p.X); // 输出 10

代码解析:

  1. using Point = (int X, int Y) 定义了元组别名,成员名可以保留
  2. p.X 依然可以访问元组的命名元素,类型推断完全正常

2.2 支持指针类型(需 unsafe 上下文)

using IntPtr = int*;

unsafe
{
    int value = 42;
    IntPtr ptr = &value;
    Console.WriteLine(*ptr); // 输出 42
}

划重点: 必须在 unsafe​ 块或者项目开启 AllowUnsafeBlocks 才能使用指针别名,但这解除了长久以来的限制,让底层互操作代码更整洁。

2.3 支持开放泛型

using Pair<T> = (T First, T Second);

var pair = new Pair<int>(1, 2);
Console.WriteLine(pair.First + pair.Second); // 输出 3

常见坑: 开放泛型别名不能用作泛型约束的基类型,也不能被继承。它只是一个类型符号替代。

2.4 支持ref struct​ 和readonly ref struct

using SpanOfInt = System.ReadOnlySpan<int>;
SpanOfInt span = stackalloc int[] { 1, 2, 3 };

意义: ref struct​ 以前无法通过别名引用,现在可以了,方便简化高频使用的 Span<T> 等类型。

三、实际示例:简化复杂 API 签名

假设有一个方法需要处理多个 Dictionary<(int, string), List<(DateTime, decimal)>> 类型,不用别名时代码可读性极差:

// 没有别名:可读性灾难
Dictionary<(int, string), List<(DateTime, decimal)>> cache = new();

使用 C#12 别名重构:

// 定义清晰的可读别名
using OrderKey = (int OrderId, string CustomerName);
using OrderEntry = (DateTime Timestamp, decimal Amount);

Dictionary<OrderKey, List<OrderEntry>> cache = new();

// 添加数据
cache.Add(
    (1001, "张三"),
    new List<OrderEntry> { (DateTime.Now, 99.9m) }
);

核心解析:

  1. 别名让业务含义显现,OrderKey​ 代替了 (int, string)
  2. 即使底层类型不变,阅读代码时心理负担大大降低
  3. 重构时只需修改别名定义,所有引用自动更新

四、限制与注意事项

限制说明
作用域别名只在当前文件中生效(除非使用 global using,C#10 起支持)
同名冲突同一作用域内不能存在同名类型或别名,编译器优先选择实际类型
不能用作基类型别名不能出现在 class MyClass : MyAlias
不能用在表达式里别名只能出现在类型位置,不能作为值或变量使用
开放泛型限制开放泛型别名不能用于 typeof​、nameof、泛型约束

常见坑: 误以为别名会创建新类型——实际上它只是编译时的语法糖,运行时不产生额外类型信息。typeof(Alias) 展开为原始类型。

最佳实践:

五、总结

C#12 的 using alias​ 升级是一次务实的改进:不引入新语法,只消除旧限制。它让元组、指针、开放泛型等类型也能享受别名的便利,尤其适合:

到此这篇关于C#12中Using Alias的使用小结的文章就介绍到这了,更多相关C#12 Using Alias内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文