2012-08-23 46 views
0

我使用Xna3,但無法獲得繼承原則的工作。從兒童訪問時基類0的值

我有這樣一個類:

public class Papa{ 
    protected int winHeight = 10; 
} 

那麼我

public class Son:Papa{ 
    int some = winHeight; 
} 

我也試過base.winHeight。由於某種原因,在逐行調試時,我可以看到父級中的winHeight的值爲10,但是在Son類中跳躍時,它的值爲0.

我猜我做了什麼但除了所有我在網上找到的網頁似乎是這樣說的。

由於

+0

我很困惑,你要在這裏完成的。您的代碼將'Background'作爲'Level1'的一種類型,但在'Level1'中也有多個'Background'對象。反過來,當你實例化'Background'時,你在super中實例化另外5個'Background'對象。請重新審視繼承的定義和用法。 –

+0

是的,我意識到這一點。那麼,這是一個更多的審判,因爲我意識到我不需要繼承,因爲它只是一個變量(...),但我只是試圖去適應它。之後我回到了更合適的方式。 – Everts

回答

1

有趣的是,我發現這個代碼實際上並不在VS2012編譯,用「的對象引用是所必需的非靜態字段,方法或屬性‘Papa.winHeight’」的誤差。你確定你的編譯?

您的變量被聲明爲帶有初始值的字段。假設您的代碼爲您編譯,這些初始化程序運行的順序(派生類和基類之間)必須是some = winHeight發生在winHeight = 10之前。

我建議你,而不是把Son initlialisation在構造函數中,Papa字段被初始化之後將其稱之爲:

public class Son : Papa 
{ 
    int some; 

    public void Son() 
    { 
     some = winHeight; 
    } 
} 
+0

好的,現在我會告訴更多,我的基類通過Initialize函數調用Son類的構造函數。在那一點上,我可以看到跳到了Son類,在基類中很好的值都是0或null。我沒有這樣說,因爲我認爲我做了一些微不足道的事情,但我的Papa類有一個Son對象數組。我可以看到在papa類中填充的數組,但是跳到兒子都是空的,所有值都變爲0.也許這個上下過程是錯誤的。 – Everts

+0

這聽起來像你應該發佈你的實際失敗的代碼,而不是一個不會重現問題的示例。 –

+0

好吧,我想我明白了。我的問題是子類調用父構造函數,但我沒有提供任何參數給構造函數...所以我的基類是空的。 – Everts