当类实现一个接口时,我得到了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;
}
我该怎么办?我该如何解决这个问题?
在MyGame
类中将WhoWin
的返回类型从MyPlayer
更改为IPlayer
,这样就可以工作了。
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;
}
您可以制作IGame
通用接口并应用where T : IPlayer
约束
public interface IGame<out T> where T : IPlayer
{
T WhoWin();
}
然后像一样实现
public class MyGame : IGame<MyPlayer>
{
public MyPlayer WhoWin()
{
// ...
return null;
}
}