为什么嵌套类型的范围不包括派生类?



我想知道为什么嵌套类型的范围不包括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;
如果我

没记错的话,当你在TBaseTest中编写TVertor时,编译器首先在类中查找它,然后在这个单元中查找,然后在"使用"部分的模块中查找它。这就是为什么你可以写简单的TVector,意思是TBaseTest.TVector。

当你编写一个从 TBaseTest 派生的类 TTestA 并在那里使用 TVector 时,它首先在 TTestA(没有 TVector)中查找,然后在此模块中查找(也没有 TVector),然后在 Uses。如果你想使用 TBaseTest 的内部类,你应该直接编写 TBaseTest.TVector,因为 TVector 是在 TBaseTest 中定义的,而不是在 TTestA 中定义的。

最新更新