class Unit
{
protected int _health;
protected int _damage;
public virtual void Attack(Unit unit)
{
unit.TakeDamage(_damage);//почему скелет вызывая метод передает аргументом поле _damage обьекта Archer?.. а не свое поле
}
public virtual void TakeDamage(int damage)
{
Console.WriteLine(damage);
if (damage >= _health)
{
_health = 0;
Die();
return;
}
_health -= damage;
}
protected virtual void Die() { }
}
class Skeleton : Unit
{
public Skeleton()
{
_health = 15;
_damage = 12;
}
public override void Attack(Unit unit)
{
Console.WriteLine("Скелет атакует.");
base.Attack(unit);
}
protected override void Die()
{
Console.WriteLine("Скелет убит.");
}
}
class Archer : Unit
{
public Archer()
{
_health = 50;
_damage = 15;
}
public override void Attack(Unit unit)
{
Console.WriteLine("Лучник атакует.");
base.Attack(unit);
}
protected override void Die()
{
Console.WriteLine("Лучник убит.");
}
}
class Program
{
static void Main(string[] args)
{
Archer archer = new Archer();
Skeleton skelet = new Skeleton();
archer.Attack(skelet);
archer.Attack(skelet);
}
}
主页
/
user-572260