2011-09-19 67 views
1

我有一個關於意外隱藏抽象方法的問題。C#抽象方法無意中繼承和隱藏方法

我創建一個基本的實體類作爲一個接口,從創建於我的工作在遊戲中的所有其他實體。

從這個實體類,我已經創建了幾個派生類。有些東西像MovingEntity,Trigger,Door等等。許多這些兒童課程也有孩子從他們身上衍生而來。例如,MovingEntity像子彈一樣擁有像Projectile和EnemyUnit這樣的類。

在我基礎機構類,我有一個更新的方法()和渲染(),它是抽象的,因爲我想每一個實體來實現這些方法。

一旦我得到了到第二級,不過,-that's-在那裏我打我的問題/問題。例如,我將使用Trigger類。觸發器派生自基礎實體類,但觸發器仍然有其自己的子項(如TriggerRespawning和TriggerLimitedLifetime)。我不想實例化一個Trigger對象,所以我可以保留這個類的抽象 - 我只會從Trigger的子類中創建對象。但是,我如何處理Trigger應該從Entity實現的抽象方法?

我想我可能只是基本使用相同的代碼在觸發我在實體一樣。聲明相同的方法,相同的名稱,相同的參數,並將其稱爲抽象。然後,觸發器的孩子將被迫執行實際的功能。

這並沒有工作,但是,因爲在觸發類,我生成錯誤說我躲在從基實體類的抽象方法。

我怎樣才能淡化強迫最終孩子實施這些抽象方法而不讓所有父母都介入他們之間的想法?我是否需要在第一輪兒童課程中使用虛擬課程?

到目前爲止,我還沒有找到一個很好的答案,所以我決定分手並提問。在此先感謝,夥計們。

回答

10

只要不重新聲明,在所有的方法 - 最終具體類必須實現所有仍然未實現一路樹的抽象方法:

public abstract class Foo 
{ 
    public abstract int M(); 
} 

public abstract class Bar : Foo 
{ 
    // Concrete methods can call M() in here 
} 

public class Baz : Bar 
{ 
    public override int M() { return 0; } 
} 
+0

哦!那麼抽象類的下級不需要提及方法呢? - 只是 - 最後的具體類。 – Torr

+0

完美,謝謝。答案比我想要面對的要簡單得多。 – Torr

+0

@Torr正確,抽象類不需要實現繼承的抽象成員。只有具體(而不是抽象),成員才需要實施。 –