一个菜鸟问题。我经常看到这样的事情:
public Constructor(Game game, string effectAssetName)
: base(game)
我真的无法理解第二行的功能。这称为基地,但为了什么?游戏不是已经在Game game的第一行定义了吗?
一个菜鸟问题。我经常看到这样的事情:
public Constructor(Game game, string effectAssetName)
: base(game)
我真的无法理解第二行的功能。这称为基地,但为了什么?游戏不是已经在Game game的第一行定义了吗?
“基础”调用确定在超类上调用哪个构造函数 - 例如,没有 :base(game) 超类将不会被初始化(准确地说,该特定构造函数将不会运行,但如果有可用的无参数构造函数可能会)
通常,当您对 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(bool) 构造函数是非法的在 Fruit 上,因为 Fruit 上没有无参数构造函数)