Schön wäre es, wenn Embarcadero dieses reparieren würde.
Hilfreich dafür wäre ein
QC Report mit folgendem Testcase und dem Hinweis Regression.
Delphi-Quellcode:
program GenericsMultipleDefaultPropertiesTest;
{$APPTYPE CONSOLE}
type
TAssocArray<T> = record
private
function GetNamedValue(const AName: string): T;
function GetValue(AIndex: Integer): T;
procedure SetNamedValue(const AName: string; const AValue: T);
procedure SetValue(AIndex: Integer; const AValue: T);
public
property Value[AIndex: Integer]: T read GetValue write SetValue; default;
property Value[const AName: string]: T read GetNamedValue write SetNamedValue; default;
end;
{ TAssocArray<T> }
function TAssocArray<T>.GetNamedValue(const AName: string): T;
begin
Result := Default(T);
end;
function TAssocArray<T>.GetValue(AIndex: Integer): T;
begin
Result := Default(T);
end;
procedure TAssocArray<T>.SetNamedValue(const AName: string;
const AValue: T);
begin
//
end;
procedure TAssocArray<T>.SetValue(AIndex: Integer; const AValue: T);
begin
//
end;
type
TStringAssocArray = TAssocArray<string>;
procedure Test;
var
A: TStringAssocArray;
begin
A['123'] := 'abc';
if A[0] = A['123'] then;
end;
begin
WriteLn('PASS'); // on compile
end.
(aber aus Erfahrung passiert sowas eher garnicht oder man muß sich die Bugfixes mit der nächsten Delphi-Version teuer erkaufen)
Eine Lösung wird es sehr wahrscheinlich nur für XE2 geben.