Hi,

I'm pretty new to using interfaces... I want to use interfaces so that
I can spot problems at compile time and not runtime.  For example: If
I used a base class with abstract methods and then created descendant
classes and forget to implement one of the abstract methods which gets
called somewhere...  I'll only find the problem at runtime and not
compile time.

I'm hoping that Interfaces will solve this issue.  Am I allowed to do
the following?
This seems to work. As soon as I leave out one of the IWindowImpl
interface methods from the TX11Window class, the compiler complains.
Also can I let my base class descend from TComponent instead of
TInterfacedObject? Looking at the declaration of the TComponent class,
it implements IUnknown, so I guess I am allowed to add more interfaces
in descendant classes.

Is there any things I need to watch out for?

type
 IWindowImpl = interface;

 IWindowImpl = interface(IInterface)
   ['{BDBC9BE7-77E0-4EA1-B40B-282CE06A32B3}']
   procedure DoAllocateWindowHandle(AParent: IWindowImpl);
   procedure DoSetWindowTitle(const ATitle: string);
 end;

 TBaseImpl = class(TComponent)
 private
   FHeight: integer;
   FWidth: integer;
   procedure SetHeight(const AValue: integer);
   procedure SetWidth(const AValue: integer);
 public
   property  Width: integer read FWidth write SetWidth;
   property  Height: integer read FHeight write SetHeight;
 end;

 TX11Window = class(TBaseImpl, IWindowImpl)
 protected
   procedure DoAllocateWindowHandle(AParent: IWindowImpl);
   procedure DoSetWindowTitle(const ATitle: string);
 end;


Regards,
 - Graeme -
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to