<div dir="ltr"><div dir="ltr">On Tue, Jul 9, 2019 at 4:18 PM Ryan Joseph <<a href="mailto:genericptr@gmail.com">genericptr@gmail.com</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">it goes against the idea of properties anyways.<br></blockquote><div><br></div><div>I don't know if I completely agree with this part in a general sense. There's plenty of perfectly valid uses for properties that are nothing like the straightforward "make something act like an array" stuff:</div><div><br></div><div>program Example;<br><br>{$mode Delphi}<br><br>uses SysUtils;<br><br>type<br>  StringGetter = function: String;<br>  function my: String; begin Exit('my'); end;<br>  function favorite: String; begin Exit('favorite'); end;<br>  function color: String; begin Exit('color'); end;<br>  function &is: String; begin Exit('is'); end;<br>  function red: String; begin Exit('red'); end;<br>  function green: String; begin Exit('green'); end;<br>  function blue: String; begin Exit('blue'); end;<br><br>type<br>  SentenceBuilder = record<br>  strict private<br>    class function GetSentence(constref A: array of StringGetter): String; static;<br>  public<br>    class property Sentence[constref A: array of StringGetter]: String read GetSentence; default;<br>  end;<br><br>  class function SentenceBuilder.GetSentence(constref A: array of StringGetter): String;<br>  var Fn: StringGetter;<br>  begin<br>    Result := '';<br>    for Fn in A do Result := Result + Fn() + ' ';<br>    Result := Result.TrimRight() + '.';<br>    Result[1] := UpCase(Result[1]);<br>  end;<br><br>begin<br>  WriteLn(SentenceBuilder[[<br>    My,<br>    favorite,<br>    color,<br>    &is,<br>    red<br>  ]]);<br>  WriteLn(SentenceBuilder[[<br>    Blue,<br>    &is,<br>    my,<br>    favorite,<br>    color<br>  ]]);<br>end.<br></div></div></div>