提问人:kludg 提问时间:12/8/2012 最后编辑:JasonMArcherkludg 更新时间:6/7/2015 访问量:398
为什么嵌套类型的作用域不包括派生类?
Why nested types' scope does not include derived classes?
问:
我想知道为什么嵌套类型的范围不包括 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;
答:
0赞
Mikhail Kopylov
1/9/2013
#1
如果我没记错的话,当你在 TBaseTest 中编写 TVertor 时,编译器首先在这个类中查找它,然后在这个单元中查找它,然后在“使用”部分的模块中查找它。这就是为什么你可以编写简单的 TVector,即 TBaseTest.TVector。
当您编写一个派生自 TBaseTest 的类 TTestA 并在那里使用 TVector 时,它首先在 TTestA 中查找(没有 TVector),然后在此模块中查找(也没有 TVetor),然后在 Uses 中查找。如果要使用 TBaseTest 的内部类,则应直接写入 TBaseTest.TVetor,因为 TVector 是在 TBaseTest 中定义的,而不是在 TTestA 中定义的。
评论
0赞
David Heffernan
1/9/2013
最后一句话毫无意义。它重复问题中出现的内容。
0赞
Mikhail Kopylov
1/9/2013
我的意思是内部类是不可继承的,比如 TBaseTest.TVector 和 TTestA.TVector 是不同的。
0赞
David Heffernan
1/9/2013
这在问题中有所说明。问题是问为什么设计是为什么它。
评论
with