【问题标题】:C# Base or Template Class?C# 基类还是模板类?
【发布时间】:2013-03-06 13:24:04
【问题描述】:

好的,所以我正在使用 XNA 制作游戏,我希望所有的敌人都从一个名为“baseEnemy.cs”的基类扩展而来。例如,我希望僵尸有一个名为“zombie.cs”的类,但要使其与“baseEnemy.cs”相连接。

我想我记得有人告诉我它的布局如下:

class zombie : baseEnemy
{

}

但我假设使用 get{} 和 set{} 将帮助我更改作为 baseEnemy.cs 的一部分存在的zombies.cs 中当前变量的值...如果这有意义吗?我不明白 get{} 和 set{} 的用法,但我在其他语言中看到过它(例如 minecraft 的代码),我认为它们的工作方式相似。

所以,假设我对敌人的速度有一个浮动...我不希望所有的敌人都以相同的速度移动(僵尸应该有低速等)。如何从 baseEnemy.cs 中获取速度并将其设置为zombie.cs 中的速度。

或者我会更好地在 baseEnemy.cs 中公开变量吗?

对不起,如果以上没有多大意义,我对 XNA 或使用的术语没有太多经验,因此我可能听起来像是在兜圈子:S

【问题讨论】:

  • 这实际上不是 XNA 问题,而是涉及整个 C# 语言。我建议您熟悉 C# 中的面向对象概念,特别是继承。
  • 这里有很多关于类、对象、文件、模板和属性之间的区别的混淆。老实说,我不太明白这个问题。

标签: c# inheritance base-class


【解决方案1】:

您正在寻找所谓的抽象方法抽象属性

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

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

注意类名和方法名前面的abstract 关键字。子类必须实现所有抽象成员,如果它本身不是抽象的。实现抽象成员时,必须使用 override 关键字。

您所描述的get set 语法称为属性。它是一种特殊的 C# 构造,用于组织字段的 getter 和/或 setter,并将它们放在一个块中。与上面使用属性的示例相同:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2011-06-12
    • 1970-01-01
    • 2016-02-23
    • 1970-01-01
    相关资源
    最近更新 更多