2011-02-22 89 views
4
TTest= class 
public abc:Integer; 
type 
    TTest2 = class 
    procedure test; 
    end; 
end; 

procedure TTest.TTest2.test(); 
begin 
    abc:=5; //'Inaccessible here' 
end; 

我得到'实例成员abc在这里无法访问'。嵌套类中的不可访问成员 - 为什么?

情况严重。我必须使用一个线程,但由于TThread是抽象的,自己的类应该继承它。在我的情况下,需要线程的类已经继承了另一个不能继承TThread的类...所以这是不可能的。 我的场景是继承TThread的嵌套类,下面我声明它。但是Execute();方法必须使用使用其父类的成员。

我该怎么做?为什么这个错误?

回答

14

内部类正是:一个单独的类。只有它的名称范围嵌套在父类的内部。你可以构造一个没有父类实例的内部类的实例。

如果您将abc成员设置为类变量,那么您可以从内部类访问它,因为类变量具有独立于对象实例的全局存储。

否则,您需要将父类的实例传递给嵌套类,以便嵌套类写入父实例的字段。

+0

+1不断堵塞丹尼! – 2011-02-22 23:23:19