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 > <fpc-pascal@lists.freepascal.org> wrote: >> Am 23.08.2017 19:39 schrieb "Marcos Douglas B. Santos" <m...@delfire.net>: >>> >>> 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 - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal