Зачем нужен Deconstruct, если без него можно легко обойтись?
procedure Deconstruct<T>(self: T; var res: T); extensionmethod;
begin
res := self;
end;
В чём его сокровенный смысл, если он всего лишь присваивает значение некоторого объекта другой переменной этого же типа?
Вот так делаются деконструкторы в C#.
Если следовать реализации деконструкторов в C#, то в PascalABC.Net они могут выглядеть так:
type
TClass = class
fX, fY, fZ: byte;
constructor Create(x: byte := 0; y: byte := 0; z: byte := 0) := (fX, fY, fZ) := (x, y, z);
procedure Deconstruct(var x, y: byte) := (x, y) := (fX, fY);
procedure Deconstruct(var x, y, z: byte) := (x, y, z) := (fX, fY, fZ);
end;
begin
var a := new TClass(1, 2);
var (x1, y1) := a; // Синтаксический сахар над явным вызовом a.Deconstruct(x1, y1);
var (x2, y2, z2) := a;
end.
.