确定。所以我试图找出如何实现重载运算符。我已经搜索了一些教程,但有一些我不知道的东西。也许它是其中一个显而易见的'我认真思考的事情。我不知道。这就是为什么我在这里。
这是重载运算符:
public static bool operator +(Hero h, Monster m)
{
if (!h.IsRunningAway)
{
if(h.AttackSpeed > m.AttackSpeed)
{
m.takesDamage(h.attackValue());
if (m.isAlive())
{
h.takesDamage(m.AttackValue);
}
}
else if(h.AttackSpeed < m.AttackSpeed)
{
h.takesDamage(m.AttackValue);
if (h.isAlive())
{
m.takesDamage(h.attackValue());
}
}
else
{
h.takesDamage(m.AttackValue);
m.takesDamage(h.attackValue());
}
}
else
{
if(h.AttackSpeed <= m.AttackSpeed)
{
h.takesDamage(m.AttackValue);
}
}
h.IsRunningAway = false;
return h.isAlive();
}
现在,我尝试在表单中的按钮点击事件中实现此功能。
private void btnAttack_Click(object sender, RoutedEventArgs e)
{
}
我已经看过的教程并不是特别清楚如何做到这一点。就像我说的,我可能会过度思考它。我经常这样做。
如果问题可以编辑得更清楚,或者需要其他任何内容,请告诉我。我很乐意编辑。
答案 0 :(得分:1)
不要 在这里使用运算符重载!
当有意义时,应该使用运算符重载。例如,-
运算符可以在DateTime
上重载。当你从另一个中减去一个DateTime
时,获得一个时间间隔是有意义的:
25/4/2016 - 24/4/2016 = 1 day
但在您的情况下,您希望在Hero
和Monster
,和上添加bool
!这毫无意义!你能告诉我这是什么意思吗?
Superman + Godzilla = True
即使你可以,也不要这样做。因为除非您需要向他们解释您的代码,否则其他人不知道。这是一场维护噩梦!
你应该做的是在Hero
类中编写一个方法。
只是在阅读您的代码时,我认为您希望英雄在使用+
运算符时杀死怪物。并且在战斗结束后返回英雄是否还活着。所以这种方法可能会起到作用:
///<summary>
///blah blah blah
///</summary>
///<returns>whether the hero is alive</returns>
public bool KillMonster(Monster m) {
if (!this.IsRunningAway)
{
if(this.AttackSpeed > m.AttackSpeed)
{
m.takesDamage(this.attackValue());
if (m.isAlive())
{
this.takesDamage(m.AttackValue);
}
}
else if(this.AttackSpeed < m.AttackSpeed)
{
this.takesDamage(m.AttackValue);
if (this.isAlive())
{
m.takesDamage(this.attackValue());
}
}
else
{
this.takesDamage(m.AttackValue);
m.takesDamage(this.attackValue());
}
}
else
{
if(this.AttackSpeed <= m.AttackSpeed)
{
this.takesDamage(m.AttackValue);
}
}
this.IsRunningAway = false;
return this.isAlive();
}
如果你想更进一步,你甚至不需要返回一个值!因为客户端代码可以调用isAlive()
来检查他是否还活着,对吧?如果isAlive()
是私有的,请将其公开。