[fpc-devel] Multiple inheritance
Ondrej Pokorny
lazarus at kluug.net
Sat Aug 19 09:12:06 CEST 2017
Hello!
Has anybody thought about multiple inheritance in object pascal? I am
now working on a client-server service that entirely uses ORM. I have
several patterns that repeat all over and some of them do not match into
the direct inheritance schema.
For now I solved multiple inheritance with include file templates (like
rtl/objpas/sysutils/finah.inc and fina.inc). But it would be much nicer
to have it built-in:
TBase = class(TObject)
private
FBaseField: Integer;
protected
procedure LoadFromNode(const aNode: TXMLNode); virtual;
public
property BaseField: Integer read FBaseField write FBaseField;
end;
TAddressExtension = class extension for TBase
private
FAddress: string;
protected
procedure LoadFromNode(const aNode: TXMLNode); override;
public
property Address: string read FAddress write FAddress;
end;
TTag = (black, gray, white, green, blue);
TTags = set of TTag;
TTagsExtension = class extension for TBase
private
FTags: TTags;
protected
procedure LoadFromNode(const aNode: TXMLNode); override;
public
property Tags: TTags read FTags write FTags;
end;
TCustomer = class(TBase, TAddressExtension, TTagsExtension)
protected
procedure LoadFromNode(const aNode: TXMLNode); override;
end;
TCustomer gets all fields and properties from TBase, TAddressExtension
and TTagsExtension. The LoadFromNode virtual method chain is:
TCustomer -> TTagsExtension -> TAddressExtension -> TBase.
Any thoughs on it? Is it sensible? How do you solve multiple inheritance?
+ If such a concept was in FPC, the LCL could get rid of the multiple
inheritance hacks in widgetset bindings :)
Ondrej
More information about the fpc-devel
mailing list