DECONSTRUCTOR(C#7)
C#7.0 引入了deconstructor模式
作用和构造函数相反,它会把字段反赋给一堆变量。
我认为翻译成析构函数是不准确的,不如翻译成分尸器(大雾)。
ta与 C++里面的析构函数(destructor)是完全不同的,
ta的方法名必须是Deconstruct,参数必须带out。
举例:
class Rectangle
{
public readonly float Width, Height;public Rectangle(float width, float height)
{
Height = height;
Width = width;
}
public void Deconstruct(out float width,out float height)
{
width = Width+16;
height = Height-2;
}
}
class Program
{
static void Main(string[] args)
{
var rect = new Rectangle(3, 4);
//--写法1
(float wid, float hei) = rect;
//--写法2
//float wid, hei;
//rect.Deconstruct(out wid, out hei);
//--写法3
//float wid, hei;
//(wid,hei)= rect;
//--写法4
//rect.Deconstruct(out var wid, out var hei);
//--写法5
//(var wid, var hei) = rect;
//--写法6
//var (wid, hei) = rect;Console.WriteLine(wid + " " + hei);
Console.ReadKey();
}
}
输出:
19 2
Deconstruct可以被重载。
Deconstruct这个方法可以是扩展方法。