Zastanawiam się, dlaczego zakres typów zagnieżdżonych nie zawiera klas pochodnych w Delphi; może to uczynić kod bardziej czysty:Dlaczego zakresy typów zagnieżdżonych nie obejmują klas pochodnych?
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;
Nie nazwałbym twojego "obejścia" obejściem problemu. Jak odróżnić TVector, które są zagnieżdżonymi typami dwóch różnych klas? Chociaż, wprawdzie, w klasach pochodnych może domyślnie być TVCorem typu podstawowego ... –
Zgaduję, że projektanci chcieli uniknąć niejednoznaczności. Być może nauczyli się od lat pracy z upiornym stwierdzeniem "z". –
Możliwe rozwiązanie polega na wprowadzeniu "zaplombowanych" typów zagnieżdżonych, tj. Typów, których nie można ponownie zadeklarować w klasach pochodnych. – kludg