On 23.08.2017 19:57, Marcos Douglas B. Santos wrote:
> On Wed, Aug 23, 2017 at 2:45 PM, Sven Barth via fpc-pascal
> <[email protected]> wrote:
>> Am 23.08.2017 19:39 schrieb "Marcos Douglas B. Santos" <[email protected]>:
>>>
>>> Wait a minute. Now I realize that procedure IShellLinkHelper.Save is a
>>> real implementation not by a class, but by a "interface helper".
>>> It's like default methods in Java(?) that we have code inside an
>>> interface...
>>
>> I don't know about Java, but the C# equivalent would be extension methods.
>> And yes, that's the point: the implementation is not part of the interface
>> implementer, but the user of the interface can add some implementation.
>> (Same for class, record and primitive types helpers)
>
> Would we have any problem of memory leaks using Interface helper with
> COM interfaces (refcount)?
> I mean, the "type helper" has constructor/destructor to create/release
> something?
It doesn't need to. A type helper is essentially syntactic sugar for a
class method with the extended parameter as first type.
Take this for example:
=== code begin ===
type
TInterfaceHelper = type helper for IInterface
procedure Something(aArg: String);
end;
// is more or less equivalent to
TInterfaceHelper = class
class procedure Something(aExtended: IInterface; aArg: String);
end;
=== code end ===
Sidenote: for primitive types and records the hidden Self parameter of
the helper is a "var" parameter as the extended type can be changed.
Regards,
Sven
_______________________________________________
fpc-pascal maillist - [email protected]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal