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