gpt4 book ai didi

C#:在基类中定义方法实现,在派生类中定义属性

转载 作者:行者123 更新时间:2023-11-30 14:28:44 25 4
gpt4 key购买 nike

我正在制作一款游戏,其中有多种士兵,每种都有自己的属性(速度、攻击力...)。显然,他们都可以行走、攻击……所以我认为用这些方法创建一个抽象类 Soldier,并为每个单位属性创建子类是合适的。问题是我不能在基类中使用派生类的属性。

简单的方法可能是在派生类中实现方法,但这意味着大量重复代码,我想避免这种情况。事实上,这会使基类变得不必要。

我试过很多东西。据我所知,我尝试过的最接近的解决方案是使用抽象/虚拟属性,但我会再次为每个单元类型复制“get”代码。也许这无法避免,但如果可能的话,我愿意。

肯定存在一个我没有想到的简单解决方案。 ¿有什么想法吗?

我有这样的想法:

public abstract class Soldier {

public int AttackPower {
get { return this.power; }
}

public Attack {
Console.WriteLine("Attacked with "+AttackPower+" attack power");
}
}

public class Lancer:Soldier {

int power=5;
}

public class Archer:Soldier {

int power=10;
}

当然,这不是一个正确的解决方案,因为 Soldier 类不知道“power”变量,但是如果我在 Soldier 类中声明“power”变量,我会得到一个错误,因为字段名是重复的。

我们将不胜感激。

最佳答案

你需要一个抽象属性:

public int AttackPower {
get { return this.power; }
}

protected abstract int Power { get; }

public class Lancer:Soldier {

protected override int Power { get { return 5; } }
}

如果您真的不喜欢属性,您也可以使用“GetPower”方法。正如您所发现的,如果基类方法需要访问数据,您必须在基类中声明该数据。

这不是代码重复,而是类型安全!

关于C#:在基类中定义方法实现,在派生类中定义属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28487495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com