2013-03-06 106 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; } 
    } 
}