[fpc-devel] Interfaces documentation suggestion

Graeme Geldenhuys graemeg at opensoft.homeip.net
Mon Aug 10 10:12:49 CEST 2009


Hi,

Below is part of the Interfaces documentation. I disagree with the 
documentation mentioned below.

================================
Interfaces - section 7.1
http://lazarus-ccr.sourceforge.net/fpcdoc/ref/refse34.html#x77-850007.1

"There are no visibility specifiers. All members are public (indeed, it 
would make little sense to make them private or protected)."
================================

Maybe it is just Joanna Carter and myself that disagree with this 
statement. But here goes... Joanna and I both agree that Interfaces when 
implemented in classes should rather be made private or protected 
instead of public.

The reason is simple. You are supposed to (or preferred to) access the 
methods via a Interface from another object instance and not the object 
instance itself - in which case, even if the methods are private or 
protected you will still have access to them via the Interface. Also the 
object who implements the Interface will be able to access the methods 
either way. But from another object instance - it is always preferred to 
access those methods via a Interface.

Example:

var
   lFilter: ItiFiltered;
   lCriteria: TtiCriteria;
begin
   lCriteria := nil;

   if Supports(Visited, ItiFiltered, lFilter) then
   begin
     if lFilter.HasCriteria then
       lCriteria := lFilter.GetCriteria;
   end;
...
end;


It might be worth mentioning this, instead of simply saying that there 
is no point in having the Interface methods implemented as private or 
protected. Also it (Borland docs) does say that there are no visibility 
specifiers, but where does it say they are Public by default? That is 
just wrong.


Regards,
   - Graeme -

-- 
fpGUI Toolkit - a cross-platform GUI toolkit using Free Pascal
http://opensoft.homeip.net/fpgui/




More information about the fpc-devel mailing list