class 继承自接口且类型继承自接口类型方法时出现 C# 错误 CS0738

C# Error CS0738 when class inherits from interface and with type that inherits from interfce type method

当class实现一个接口时,我得到了CS0738,接口有一个方法,return类型的接口。

而在class中,return类型是一个实现了return类型接口的结构。

简单地说,这段代码说明了问题所在:

public interface IGame
{
    IPlayer WhoWin();
}

public interface IPlayer
{
    int ID { get; }
}

在class中:

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 class 中将 WhoWin 的 return 类型从 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;
    }
}