I created the following class, after reading about the significant performance improvement of TDictionary over TStringList:
TAnsiStringList = class(TObjectDictionary<AnsiString,TObject>) public constructor Create(const OwnsObjects: Boolean = True); reintroduce; destructor Destroy; override; procedure Add(const AString: AnsiString); procedure AddObject(const AString: AnsiString; AObject: TObject); end; I coded the constructor like this:
{ TAnsiStringList } constructor TAnsiStringList.Create(const OwnsObjects: Boolean = True); begin if OwnsObjects then inherited Create([doOwnsKeys,doOwnsValues]) else inherited Create; end; ...expecting that this TObjectDictionary constructor would be called:
constructor Create(Ownerships: TDictionaryOwnerships; ACapacity: Integer = 0); overload; ...if the Ownerships parameter were specified. If the Ownerships parameter is not specified, I expected that the following inherited TDictionary constructor would be called:
constructor Create(ACapacity: Integer = 0); overload; The code compiles and runs, but when I call
inherited Create([doOwnsKeys,doOwnsValues]) I get the following error: Invalid class typecast
Does anyone see what I'm doing wrong, and is there a proper way to do this?
TIA