klu*_*udg 10 delphi types nested
我想知道为什么嵌套类型的范围不包括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;
Run Code Online (Sandbox Code Playgroud)
如果我没记错的话,当您在 TBaseTest 中编写 TVertor 时,编译器首先在此类中查找它,然后在本单元中查找,然后在“使用”部分的模块中查找。这就是为什么你可以编写简单的TVector,即TBaseTest.TVector。
当您编写从 TBaseTest 派生的类 TTestA 并在那里使用 TVector 时,它首先在 TTestA 中查找(没有 TVector),然后在该模块中查找(也没有 TVector),然后在 Uses 中查找。如果要使用TBaseTest的内部类,则应直接编写TBaseTest.TVector,因为TVector是在TBaseTest中定义的,而不是在TTestA中定义的。