当类实现一个接口时,我得到了 CS0738,并且接口有一个方法,返回类型为接口。
在类中,返回类型是一个实现返回类型接口的结构体。
简单地说,这段代码说明了问题:
public interface IGame
{
IPlayer WhoWin();
}
public interface IPlayer
{
int ID { get; }
}
在课堂上:
public class MyGame : IGame
{
// ERROR CS0738
public MyPlayer WhoWin()
{
// ...
return null;
}
}
public class MyPlayer : IPlayer
{
public int ID
{
get
{
return ColorTranslator.ToWin32(Color);
}
}
public Color Color;
}
我该怎么办?我该如何解决问题?
答案 0 :(得分:3)
在您的 WhoWin
类中将 MyPlayer
的返回类型从 IPlayer
更改为 MyGame
然后它应该可以工作了。
public class MyGame : IGame
{
// CHANGE THIS TO IPlayer like here:
public IPlayer WhoWin()
{
// ...
return null;
}
}
public class MyPlayer : IPlayer
{
public int ID
{
get
{
return ColorTranslator.ToWin32(Color);
}
}
public Color Color;
}
答案 1 :(得分:2)
您可以制作 IGame
通用接口并应用 where T : IPlayer
约束
public interface IGame<out T> where T : IPlayer
{
T WhoWin();
}
然后像这样实现它
public class MyGame : IGame<MyPlayer>
{
public MyPlayer WhoWin()
{
// ...
return null;
}
}