2013-03-06 110 views
1

好吧,我正在使用XNA製作遊戲,我希望所有的敵人都能從一個名爲「baseEnemy.cs」的基類中進行擴展。例如,我想讓一個殭屍擁有一個名爲「zombie.cs」的類,但是使它成爲「baseEnemy.cs」。C#基類或模板類?

我想我記得被告知其將進行佈局,如:

class zombie : baseEnemy 
{ 

} 

但我假設使用GET {}和集合{}將幫助我改變殭屍當前變量的值。 cs作爲baseEnemy.cs的一部分存在...如果這是有道理的?我不明白get {}和set {}的用法,但我已經在其他語言(例如minecraft的代碼)中看到過它,我認爲它們的工作方式類似。所以,我說我有一個敵人的速度浮動...我不希望所有的敵人以相同的速度移動(殭屍的應該有一個低速等)。我怎麼能從baseEnemy.cs中獲得速度,並將其設置爲zombie.cs中的速度。

或者我會更好只是在baseEnemy.cs中公開變量?

很抱歉,如果上面沒有太大的意義,我不是太有使用XNA或術語經歷,因此我可能聽起來像我轉圈圈:S

+0

這實際上不是XNA問題,而是整體涉及到C#語言。我建議你讓自己熟悉C#中面向對象的概念,特別是繼承。 – Lucius 2013-03-06 13:51:49

+0

這裏有很多關於類,對象,文件,模板和屬性之間區別的混淆。老實說,我不太瞭解這個問題。 – 2013-03-06 14:07:35

回答

2

您正在尋找所謂的抽象方法抽象屬性

abstract class Enemy 
{ 
    public abstract float GetSpeed(); 
} 

class Zombie : Enemy 
{ 
    public override float GetSpeed() 
    { 
     return 10; 
    } 
} 

注意abstract關鍵字類名和方法名前。子類必須實現全部抽象成員,如果它不是抽象的。當抽象成員實現時,必須使用override關鍵字。

getsetset您正在描述的語法被稱爲屬性。它是一個特殊的C#構造,它組織字段的getter和/或setter並將它們放在一個塊中。與上面使用屬性相同的示例:

abstract class Enemy 
{ 
    public abstract float Speed { get; } 
} 

class Zombie : Enemy 
{ 
    public override float Speed 
    { 
     get { return 10; } 
    } 
}