pascalabcnet/TestSuite/patterns/patterns-overloading-and-ambiguity.pas

38 lines
720 B
ObjectPascal
Raw Permalink Normal View History

2018-05-11 19:26:55 +03:00
type
My<T> = class
public
_a: T;
2018-05-11 21:19:13 +03:00
2018-05-11 19:26:55 +03:00
procedure Deconstruct(var a: T);
begin
a := _a;
end;
end;
2018-05-11 21:19:13 +03:00
procedure Deconstruct<T>(self: My<T>; var a: T); extensionmethod;
2018-05-11 19:26:55 +03:00
begin
2018-05-11 21:19:13 +03:00
Assert(false);
2018-05-11 19:26:55 +03:00
a := self._a;
end;
2018-05-11 21:19:13 +03:00
procedure Deconstruct<T>(self: My<T>; var a: object); extensionmethod;
2018-05-11 19:26:55 +03:00
begin
2018-05-11 21:19:13 +03:00
a := self._a;
end;
procedure Deconstruct<T>(self: My<T>; var a: object; var b: object); extensionmethod;
begin
Assert(false);
a := self._a;
end;
begin
var l := new My<List<integer>>;
2018-05-11 19:26:55 +03:00
l._a := Arr(1, 2, 3).ToList;
match l as object with
2018-05-11 21:19:13 +03:00
My<real>(a: real): Assert(false);
My<integer>(a: integer): Assert(false);
My<List<integer>>(a: object): ;
else Assert(false);
2018-05-11 19:26:55 +03:00
end;
end.