好吧,我有一个父类,在“受保护”选项卡中使用受保护的类变量声明了一个嵌套类。在另一个单元中,我有一个子类,它继承自父类。当我尝试访问受保护的东西时来自父类的/ public工作,但是当我尝试访问受嵌套类保护的东西时,它不起作用。
type
TParent = class(TObject)
protected
class var x:integer;
type
TNested = class(TObject)
protected
class var y:integer;
end;
end;
我在子类中的代码:
x := 10; //works
y := 10; //undeclarated idenitifier 'y'.
TNested.y := 10; //undeclarated idenitifier 'y'
子类的声明是:
type
TChild = class(TParent);
如何访问y?
答案 0 :(得分:3)
y:integer是TNested类的受保护字段,即。只能由TNested和它自己的继承类使用。
您可能可以使用来自TParent的TNested,但这是因为在Delphi中,如果从同一个单元调用,您可能拥有更大的访问权限。因此TParent和TNested在同一个单元中,因此您可以从TParent调用TNested受保护的数据。但由于TChild与TNested不同,所以不可能。
答案 1 :(得分:0)
如果TChild和TParent在同一个单元中,这将实现工作,因为单元内的类之间存在隐含的友谊。
要在示例中访问y,您需要执行以下两项操作之一:
答案 2 :(得分:0)
TParent.x := 10;
TParent.TNested.y := 10;
答案 3 :(得分:0)
您提供的示例是使用嵌套类,而不是继承它。
嵌套分类可以在声明类的子类中继承:
TSubParent = class(TParent)
protected
type
TSubNested = class(TNested)
public
class var Z : integer;
end;
end;