快速使用 C# 解构器 Deconstruct

解构 Deconstruct

解构器 Deconstruct 可以视为构造方法的逆过程

快速使用

在类的定义中加入方法名为 Deconstruct ,空返回值,public 访问修饰符的方法
参数列表使用 out type paramName 构建
例如

点击查看代码
public void Deconstruct(out string Name, out double Height)
{
  Name = this.Name;
  Height = this.Height;
}

在使用中可以通过解构元组接收解构器的返回

点击查看代码

Animals cat = new Animals() { Height = 30.0, Name = "cat" };
(string _, double height) = cat; //解构元组 _ 为弃用元素

元组可以使用别名,不一定需要使用默认命名 item1 item2 (C#7)
请注意,解构器并不会释放内存,因此可以在调用解构器之后,继续使用对象
解构器 Deconstruct 允许方法重载,因此一个 Class 中可以存在多个 Deconstruct 方法

实例解构的对称性

实例解构与构造器的元组赋值有一种对称的美
例如

点击查看代码

class Point
{
    int X;
    int Y;
    public Point(int x, int y) => (X, Y) = (x, y);	//构造
    public void Deconstruct(out int x, out int y) => (x, y) = (X, Y);	//解构
}

Deconstruct 使用参数作为解构的组合而不是直接返回一个元组
是为了进行方法重载,可以根据需要的数据数量进行不同的解构

编译器是怎么解析 Deconstruct 的

例如有如下解构代码
var(a, b) = instance;
编译器会将这段代码翻译成

点击查看代码

instance.Deconstruct(out var tempa,out var tempb);
var a = tempa;
var b = tempb;

因此实例解构的重载不支持参数的类型,只能对参数的数量进行重载

posted @ 2022-01-21 18:12  文工程序  阅读(714)  评论(0编辑  收藏  举报