游戏和继承

时间:2012-05-18 10:56:37

标签: inheritance xna

一个菜鸟问题。我经常看到那些东西:

        public Constructor(Game game, string effectAssetName)
        : base(game)

我真的不能理解第二行的功能。这称为基地但是为了什么?游戏游戏的第一行中是否已定义游戏?

1 个答案:

答案 0 :(得分:1)

“base”调用确定在超类上调用哪个构造函数 - 例如没有:base(游戏)超类不会被初始化(确切地说,那个特定的构造函数不会运行,但是如果有一个可用的无参数构造函数)

通常,当您继承Game类时,您正在添加自己的功能,但仍需要Game类来初始化并实现它自己的功能。您实质上是在进行以下调用

MyGameObject.Constructor(game, effectAssetName) 

Game.Constructor(game);

进一步(坏:))示例

class Fruit 
{    
  private bool _hasPips;

  public Fruit(bool hasPips) 
  {
     _hasPips = hasPips;
  }
}

class Apple : Fruit 
{
  private bool _isGreen;

  public Apple(bool isGreen, bool hasPips) : base(hasPips)
  {
    _isGreen = isGreen;
  }
}

在创建一个新的Apple时,会调用base(hasPips),如果没有这个,那么Fruit超类的hasPips属性将永远不会被设置(实际上在这种情况下,在Apple上创建构造函数而不调用base是非法的(因为Fruit上没有无参数构造函数,所以在Fruit上的bool)构造函数