Подтвердить что ты не робот

Почему область вложенных типов не включает производные классы?

Интересно, почему область вложенных типов не включает производные классы в Delphi; он может сделать код более чистым:

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;
4b9b3361

Ответ 1

Если я не ошибаюсь, когда вы пишете TVertor в TBaseTest, компилятор ищет его сначала в этом классе, затем в этом блоке, затем в модулях в разделе Uses. Вот почему вы можете написать простой телевизор, то есть TBaseTest.TVector.

Когда вы пишете класс TTestA, полученный из TBaseTest, и используете там TVector, он выглядит сначала в TTestA (нет телевизионного блока), затем в этом модуле (там тоже нет ТВ-устройства), затем в Uses. Если вы хотите использовать внутренний класс TBaseTest, вы должны написать непосредственно TBaseTest.TVector, потому что TVector определен в TBaseTest, а не в TTestA.