2011-02-22 53 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