EKsumic's Blog

let today = new Beginning();

Click the left button to use the catalog.

OR

C#7.0之Deconstructor模式

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这个方法可以是扩展方法。

This article was last edited at 2020-03-13 23:36:48

* *