<p>Am 01.09.2017 12:15 schrieb "Maciej Izak" <<a href="mailto:hnb.code@gmail.com">hnb.code@gmail.com</a>>:<br>
><br>
> 2017-09-01 11:41 GMT+02:00 Stefan Glienke <<a href="mailto:sglienke@dsharp.org">sglienke@dsharp.org</a>>:<br>
>><br>
>> Again you will cause unnecessary headaches because now your helper has the dependency of the builtin and the third party one.<br>
>> How would third party one and third party two implement them? They both probably would extend the builtin one. Which one can you use in your code then?<br>
>> Yes, the one that comes last in the uses. What if you want to use functions from both? Out of luck again.<br>
>><br>
>> Inheritance regardless what form is never is the best option here. I think "ancestor list" is just a misnomer in the documentation as it cannot be a list but only one in case of class helper.<br>
><br>
><br>
> The control of modules order in uses section can turn programmers life into real hell for type helpers. I think that new directive $EXPLICITHELPERS should help :<br>
><br>
> type<br>
>   TH1 = record helper for string<br>
>     procedure foo;<br>
>     procedure foo1;<br>
>   end;<br>
><br>
>   TH2 = record helper for string<br>
>     procedure foo;<br>
>     procedure foo2;<br>
>   end;<br>
><br>
>   TH3 = record helper for string<br>
>     procedure foo;<br>
>     procedure foo3;<br>
>   end;<br>
><br>
> var<br>
>   s: string;<br>
> begin<br>
>   s.foo; // call TH3.foo<br>
><br>
> {$EXPLICITHELPERS TH1 for string} // scope for helpers limited only to TH1<br>
>   s.foo; // call TH1.foo<br>
>   s.foo3; // error<br>
><br>
> {$EXPLICITHELPERS TH2, TH1 for string}<br>
>   s.foo; // call TH2.foo<br>
>   s.foo1; // call TH1.foo1<br>
><br>
> {$EXPLICITHELPERS default for string}<br>
>   s.foo; // call TH3.foo<br>
>   <br>
> {$EXPLICITHELPERS TH1, default for string} <br>
>   s.foo; // TH1.foo<br>
>   s.foo1;<br>
>   s.foo2;<br>
>   s.foo3;<br>
> end.</p>
<p>No, directives won't be abused for something like that.</p>
<p>Regards,<br>
Sven</p>