Hallo Gemeinde,
in einer alten Codestelle will ich die
System.Classes.IInterfaceList
bzw.
TInterfaceList
mit einer eigenen generischen Liste ersetzen.
Da der normalen
System.Generics.Collections.TThreadList<T>
einige Methoden fehlen, wollte ich sie durch Ableitung ergänzen.
Wenn ich aber versuche für die Eigenschaft
Items
den Setter
Put
genauso wie in der alten
TInterfaceList
umzusetzen, sagt mir der Compiler, dass der linken Seite nichts zugewiesen werden kann.
Code:
[dcc32 Error] ThreadJob.pas(270): E2064 Left side cannot be assigned to
Siehe folgenden Code, die auskommentierte Stelle ist es.
Delphi-Quellcode:
uses
System.Generics.Collections;
type
TGenericThreadList<T> = class(System.Generics.Collections.TThreadList<T>)
private
function Get(Index: Integer): T;
function GetCount: Integer;
procedure Put(Index: Integer; const Item: T);
procedure SetCount(const NewCount: Integer);
public
function First: T;
property Count: Integer read GetCount write SetCount;
property Items[Index: Integer]: T read Get write Put; default;
end
implementation
uses
System.RTLConsts;
...
procedure TGenericThreadList<T>.Put(Index: Integer; const Item: T);
var
LList: TList<T>;
begin
LList := LockList;
try
if (Index < 0) or (Index >= LList.Count) then
LList.Error(SListIndexError, Index);
// LList.List[Index] := Item; <--- das schluckt er nicht!
LList.Items[Index] := Item; // <--- das kompiliert
finally
UnlockList;
end;
end;
...
Wo ist denn da mein Denkfehler?
Wenn man den Typ konkretisiert, also statt T meinetwegen
IInterface
oder
TMeinAuto
, dann geht das.
Ist das ein Bug in XE3?