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

标签 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;

最佳答案

如果我没记错的话,当您在 TBaseTest 中编写 TVertor 时,编译器首先在此类中查找它,然后在本单元中查找,然后在“使用”部分的模块中查找。这就是为什么你可以编写简单的 TVector,即 TBaseTest.TVector。

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

关于delphi - 为什么嵌套类型的范围不包括派生类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13777750/

相关文章:

delphi - 如何在同一项目组中的项目之间共享单元?

java - ArrayList<HashMap<String,String>> 键迭代/输出到数组

python - 连接并扁平化两个嵌套的 python 列表

bash,嵌套命令和重定向

delphi - 在Delphi中,有没有办法调整TMemo的行距?

delphi - 是否可以通过 Show() 或 ShowModal() 知道表单的显示

sqlite - ON CONFLICT(id) DO UPDATE SET 不适用于 DELPHI 10.3.1 中的 FireDAC

c - 这两个声明有什么区别?

python - python 类中的方法可以用子类定义的类型进行注释吗?

c++ - 使用模板类的嵌套类型作为模板参数