Zeig mal die zugehörigen Uses-Anweisungen. TValue ist sowohl als generischer Typ in TDictionary als auch als relater Typ in System.RTTI deklariert. Eventuell hilft es die uses-Anwwisung etwas umzubauen.
Ich hab mal alles aus der
Unit gelöscht, bis das hier übrig blieb (uses
Rtti in Verbindung mit TValue in Foo verursacht das Problem):
Delphi-Quellcode:
unit MyUnit;
interface
uses
Classes, generics.defaults, generics.Collections;
type
TTest =
class(TObject)
procedure foo;
end;
TMyDictionary<TKey, TValue> =
class(TDictionary<TKey, TValue>)
public
procedure Assign(Source: TObject);
virtual;
end;
implementation
uses
Rtti;
procedure TTest.foo;
var
V: TValue; <-- hier kommt das TValue aus der
Rtti und muss es auch!
begin
end;
procedure TMyDictionary<TKey, TValue>.Assign(Source: TObject);
var
LKey: TKey;
LValue: TValue;
begin
if Source
is TMyDictionary<TKey, TValue>
then
begin
for LKey
in (Source
as TMyDictionary<TKey, TValue>).Keys
do
begin
LValue := (Source
as TMyDictionary<TKey, TValue>).Items[LKey];
Add(LKey, LValue); <-- **FEHLER**
end;
end
end;
end.