Mi chiedo perché l'ambito dei tipi annidati non includa classi derivate in Delphi; potrebbe rendere il codice più pulito:Perché l'ambito dei tipi nidificati non include le classi derivate?
type
TBaseTest = class
public type
PVector = ^TVector;
TVector = record
A, B, R: Integer;
end;
public
procedure Execute(var Vector: TVector); virtual; abstract;
end;
TTestA = class(TBaseTest)
public
// E2003 Undeclared identifier: 'TVector'
procedure Execute(var Vector: TVector); override;
// workaround:
// procedure Execute(var Vector: TBaseTest.TVector); override;
end;
Non definirei la "soluzione alternativa" come soluzione alternativa. Come distinguere tra TVector che sono tipi annidati di due classi diverse? Anche se, ammettiamolo, nelle classi derivate si poteva impostare di default il TVector del tipo di base ... –
Direi che i progettisti volevano evitare l'ambiguità. Forse hanno imparato da anni di lavoro con l'orribile frase 'with'. –
la soluzione possibile sta introducendo tipi nidificati "sigillati", ovvero i tipi che non possono essere riprogrammati nelle classi derivate. – kludg