Ryan,

Maybe I’m doing something stupid but other languages have forward declarations 
so I wonder why Pascal isn’t doing this also since it seems like the obvious 
solution.
Pascal does have forward declarations e.g.

class TClassB;

class TClassA
private
  FClassBObject: TClassB;
end;

class TClassB
...
end;

Otherwise, if you really want to avoid defining interdependent classes in the same unit (not sure why you want to avoid this) then try this:

unit unitA;

interface

type

class TClassA
private
  FClassBObject: TObject;
public
  procedure SomeProc;
end;

implementation

uses unitB;

Maybe I’m doing something stupid but other languages have forward declarations 
so I wonder why Pascal isn’t doing this also since it seems like the obvious 
solution.


procedure TClassA.SomeProc;
begin
  TClassB(FClassBObject).OtherProc;
end;

end.

unitB is pretty similar.

As long as you make sure that FClassBObject really is a TClassB object when it is assigned, the above should all work. The only extra effort is with the TClassB(...) wrapper for each reference to FClassBObject.

On 14/04/16 11:35, Ryan Joseph wrote:
On Apr 14, 2016, at 5:00 PM, Michael Van Canneyt <mich...@freepascal.org> wrote:

You should not need TClassB here. You defeat the point of using an
interface.
I’m using the interface for specific communication I want denoted in the 
interface but I’m still typically using properties of the child class in 
addition to the interface. Offloading all properties to the interface would 
work but it would be making accessing them very cumbersome because it requires 
using Support instead of just accessing them directly.

The interface was probably over complicating the example actually because the true 
problem is having this pattern of a parent->child relationship where both 
classes need to know about each other to some extent but putting them in the same 
unit causes clutter and pollution in other units namespaces. In this example it’s 
likely that many other units  use TClassB and it’s not exclusive to TClassA so 
putting them in the same unit doesn’t make sense.

Maybe I’m doing something stupid but other languages have forward declarations 
so I wonder why Pascal isn’t doing this also since it seems like the obvious 
solution.

Regards,
        Ryan Joseph

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal


_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to