战斗机类不实现接口成员
本文关键字:接口 成员 实现 战斗机 | 更新日期: 2023-09-27 17:56:49
我收到此错误:
错误 1 "Fight.Fighter"未实现接口成员 'Fight.IFighter.Utok(Fight.IFighter)'
这是我第一次尝试学习使用接口,很抱歉转储问题。
有什么想法吗?
我有以下代码:
接口:
interface IFighter
{
string GraphicLife();
bool IsLive();
int Obrana(int utocneCislo);
void Utok(IFighter bojovnik);
}
}
类:
class Fighter : IFighter
{
protected string name;
protected int life;
protected int maxLife;
protected int attack;
protected int defence;
protected Kostka kostka;
public Fighter(string name, int life, int maxLife, int attack, int defence, Kostka kostka){
this.name = name;
this.life = life;
this.maxLife = maxLife;
this.attack = attack;
this.defence = defence;
this.kostka = kostka;
}
public bool IsLive()
{
if (life > 0)
{
return true;
}
else return false;
}
public string GraphicLife()
{
int pozic = 20;
int numberOfParts = (int)Math.Round(((double)life / (double)maxLife) * (double)pozic);
string zivot = String.Concat(Enumerable.Repeat("#", numberOfParts));
zivot = zivot + String.Concat(Enumerable.Repeat("_", pozic - numberOfParts));
zivot = "[" + zivot + "]";
return zivot;
}
public void Utok(Fighter warrior)
{
if (warrior.IsLive())
{
int utok = (int)Math.Round((double)attack / (double)kostka.getPocetStran() * (double)kostka.getNumber());
int obrana = warrior.Obrana(utok);
Console.WriteLine(this.name + "utoci na " + warrior.name + " silou " + utok + " " + warrior.name + " se brani silou " + obrana);
Console.WriteLine(this.name + " - " + this.life);
Console.WriteLine(this.GraphicLife());
Console.WriteLine(warrior.name + " - " + warrior.life);
Console.WriteLine(warrior.GraphicLife());
}
else Console.WriteLine(this.name + " utoci na mrtvolu");
}
public int Obrana(int attackNumber)
{
int localDefence = (int)Math.Round((double)defence/ (double)kostka.getPocetStran() * (double)kostka.getNumber());
int utok = attackNumber - localDefence;
if (utok < 0) utok = 0;
life = life - utok;
return localDefence;
}
}}
您在方法的参数列表中使用具体类型 Fighter,而不是抽象类型 IFighter。
更改以下行
public void Utok(Fighter warrior)
自
public void Utok(IFighter warrior)
如果在类中实现接口中定义的确切类型,则需要使用它。
如果在创建类之前定义接口(这是最常见的方法),则可以使用Visual Studio提供的很好的帮助程序来为您完成一些工作。将光标指向接口名称,然后使用"实现接口"函数自动为接口创建方法存根。
编辑:
您还需要将属性"Name"添加到接口中以使其正常工作。它必须是一个至少需要一个getter的属性:
string name { get; }
普通变量而不是 getter 在这里不起作用,因为接口不能包含变量。
只有接口的属性可用,无论有多少类在应用程序中的其他位置实际实现该接口。
Utok
的方法签名需要 IFighter
实例,而不是接口协定定义的Fighter
。
public void Utok(IFighter warrior)
{
// ...
}
若要实现接口成员,实现类的相应成员必须是公共的、非静态的,并且与接口成员具有相同的名称和签名。
这意味着完全相同的签名。