gpt4 book ai didi

c# - Fighter类没有实现接口(interface)成员

转载 作者:太空宇宙 更新时间:2023-11-03 19:04:18 24 4
gpt4 key购买 nike

我收到这个错误:

Error 1 'Fight.Fighter' does not implement interface member 'Fight.IFighter.Utok(Fight.IFighter)'

这是我第一次尝试学习使用界面,很抱歉转储问题。

有什么想法吗?

我有以下代码:

接口(interface):

    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)

如果在类中实现它,则需要使用接口(interface)中定义的确切类型

如果您在创建类之前定义您的接口(interface)(这是最常见的方式),您可以使用 Visual Studio 提供的一个很好的帮助程序来为您完成一些工作。将光标指向接口(interface)名称并使用“实现接口(interface)”功能自动为您的接口(interface)创建方法 stub 。

编辑:

您还需要将属性“Name”添加到界面才能使其正常工作。它必须是至少需要一个 getter 的属性:

string name { get; }

普通变量而不是 getter 在这里不起作用,因为接口(interface)不能包含变量。

只有接口(interface)的属性可用,无论有多少类在应用程序的其他地方实际实现了该接口(interface)。

关于c# - Fighter类没有实现接口(interface)成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30893298/

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